Java MVP、JFrame、JDialog:GUI正在冻结
我有一个主框架(带有JFrame字段)asiview,然后是presenter(在视图的构造函数中创建),它将侦听器添加到按钮和其他内容中。我是这样做的:Java MVP、JFrame、JDialog:GUI正在冻结,java,swing,user-interface,Java,Swing,User Interface,我有一个主框架(带有JFrame字段)asiview,然后是presenter(在视图的构造函数中创建),它将侦听器添加到按钮和其他内容中。我是这样做的: public static void main(final String[] args) { EventQueue.invokeLater(new Runnable() { @Override public void run() { try {
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();
}
}
});
}
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
}
public class ParametrizableDialog extends JDialog implements Parametrizable {
protected List<Double> params;
@Override
public void setParams(final List<Double> params) {
this.params = params;
}
}
MyWindow在其构造函数中只调用一个只创建GUI字段的方法-初始化。最后(字面上是代码的最后一行)它创建了presenter
演示者应该在主视图中显示某些事件的新JDialog。它有一个方法,使我的GUI冻结。看起来是这样的:
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();
}
}
});
}
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
}
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添加任何组件。那么,谁知道你在遗漏的代码中做了什么呢
要获得更多说明问题的帮助,请发帖子。GUI冻结是什么意思?您无法与UI组件交互,它会挂起…这是否只有在
JDialog
可见时才会发生?我试图编写SSCE,但我确实发现这是另一个问题(我未能证明错误)。谢谢你给我指路。