Java MVP、JFrame、JDialog:GUI正在冻结

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 {

我有一个主框架(带有JFrame字段)asiview,然后是presenter(在视图的构造函数中创建),它将侦听器添加到按钮和其他内容中。我是这样做的:

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,但我确实发现这是另一个问题(我未能证明错误)。谢谢你给我指路。