我有主框架(与JFrame字段)asi 视图,然后演示器(在视图的构造函数中创建),添加监听器按钮和东西。我这样做:
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在它的构造函数中只调用一个方法——initialize——它只创建GUI字段。最后(实际上是代码的最后一行),它创建了presenter。
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
>参数,如下所示:
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教程中的并发部分。
我们不知道你在做什么,因为你的代码不完整。例如,您甚至不需要向GUI添加任何组件。所以谁知道你在你遗漏的代码中做了什么。
要获得更多帮助,请发布演示问题的SSCCE