Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javagui:实例化一个复杂的弹出窗口&x27;每次启动时都会启动组件';s打开与存储它们_Java_Swing_User Interface_Awt_Jdialog - Fatal编程技术网

javagui:实例化一个复杂的弹出窗口&x27;每次启动时都会启动组件';s打开与存储它们

javagui:实例化一个复杂的弹出窗口&x27;每次启动时都会启动组件';s打开与存储它们,java,swing,user-interface,awt,jdialog,Java,Swing,User Interface,Awt,Jdialog,我有一个相当复杂的JDialog窗口,可以用一个按钮打开,并强制用户在继续之前关闭它。它是模拟的序列创建者,因此不应过于频繁地打开它。(JDialog窗口本身包含大约15个标签、10个按钮、10个复选框、几个文本字段、一个列表和一个表。800x400) 在后台准备好主面板及其组件,或者实例化它,并通过构造函数构建在窗口关闭时将被销毁的面板,这是更好的做法吗?Java似乎有自己的内部缓存用于各种事情(也适用于新组件的产生)。看看这个: public class Test {

我有一个相当复杂的JDialog窗口,可以用一个按钮打开,并强制用户在继续之前关闭它。它是模拟的序列创建者,因此不应过于频繁地打开它。(JDialog窗口本身包含大约15个标签、10个按钮、10个复选框、几个文本字段、一个列表和一个表。800x400)


在后台准备好主面板及其组件,或者实例化它,并通过构造函数构建在窗口关闭时将被销毁的面板,这是更好的做法吗?

Java似乎有自己的内部缓存用于各种事情(也适用于新组件的产生)。看看这个:

    public class Test {

      public static void main(String[] args) {

        long l11 = System.currentTimeMillis();
        new JDialog();
        long l12 = System.currentTimeMillis();

        long l21 = System.currentTimeMillis();
        new JDialog();
        long l22 = System.currentTimeMillis();

        System.out.println("dialog 1: " + (l12 - l11) + " ms");
        System.out.println("dialog 2: " + (l22 - l21) + " ms");
      }
    }
输出:

    dialog 1: 54 ms
    dialog 2: 1 ms
您可以替换新的JDialog()与任何其他swing组件(或许多)一起使用,甚至是您创建的自定义组件,您将获得类似的结果


考虑到您还必须重置面板/组件,因此最好从一个新的(新的)面板/组件开始。这也将在维护该面板的同时消除所有可能的错误。

创建或保存该面板似乎不是一个占用大量资源的对话框。如果你提到几千个组件,也许。。我使用这些类型对话框的第一种方法是1)仅在需要时动态创建它们,然后。。2) 在我看到
OutOfMemoryError
(即使如此,我也会查看应用程序的其他部分。首先,“哪种做法更好”对于stackoverflow来说不是一个很合适的问题,因为它主要是基于意见的。我的意见是:进行实例化,看看你对它是否“满意”。如果需要“太长时间”才能打开,那就开始绞尽脑汁进行优化——而不是在此之前。以“非静态”方式进行优化是一项更大的任务,因此,只有在节省了合理数量的资源的情况下,我才会这样做。这不是一个基于意见的问题。。这完全是技术性的。如果在EDT上创建对话框,结果如何?我打赌会有很大的不同。那你就输了。:)太糟糕了,我们不能在注释中添加代码,但是您可以通过在EDT上执行该代码来进行测试(我想您已经知道如何做了,但我是为其他人编写的:使用javax.swing.SwingUtilities.invokeLater方法)。您可以编辑您的答案以显示修改后的代码。你的例子可能是测量。您还需要了解内存消耗情况。