我有主框架(带有 JFrame 字段)asi view,然后有 presenter (在 View 的构造函数中创建),它将监听器添加到按钮和其他内容。我这样做是这样的:
public static void main(final String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
MyWindow window = new MyWindow();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
MyWindow 在其构造函数中仅调用一种方法 - intialize - 仅创建 GUI 字段。最后(实际上是代码的最后一行)它创建了演示者。
Presenter 应在主视图中的某些事件上显示新的 JDialog。它有一种方法,使我的 GUI 卡住。它看起来像这样:
protected double[] getParams(final Class<?> indicatorClass) {
ParametrizableDialog dialog = dialogs.get(indicatorClass); // works well
List<Double> params = new ArrayList<Double>();
dialog.setParams(params);
dialog.setModal(true);
dialog.setLocationRelativeTo(view.getFrame());
dialog.setVisible(true);
System.out.println(params); // it actually works, params are obtained from JDialog as user input
return Doubles.toArray(params); // guava
}
ParametrizableDialog
正常JDialog
实现一个设置 List<Double
的方法接口(interface)> 参数如下:
public class ParametrizableDialog extends JDialog implements Parametrizable {
protected List<Double> params;
@Override
public void setParams(final List<Double> params) {
this.params = params;
}
}
现在,有人知道我犯了什么错误以及为什么我的 GUI 卡住了? 谢谢!
最佳答案
如果 GUI 卡住,通常是因为您阻止了 EDT。阅读 Swing 教程中关于 Concurrency 的部分了解更多信息。
我们无法判断您在做什么,因为您的代码不完整。例如,您甚至不向 GUI 添加任何组件。所以谁知道你在你遗漏的代码中做了什么。
如需更多帮助,请发布您的 SSCCE这说明了问题。
关于java - MVP、JFrame、JDialog : GUI is freezing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5627449/