EDT位置有几个JFrame窗口

dam*_*son 3 java swing

我有一个Swing JFrame.如果我在程序执行期间在新线程中创建一个新的JFrame,那将是EDT?在最后一个JFrame窗口的当前线程中或在第一个窗口中.

编辑:谢谢你的回答.

我理解他们,我很好.我知道我们不必在EDT的其他地方创造摆动对象,但我遇到了问题.

我解释; 我开发了一个用于创建和提取存档的JAVA应用程序,如winrar.您可以使用多线程同时创建多个arhive.最近,我希望在每次创建时在JprogressBar形式的JprogressBar中添加信息状态.但我的问题是在新的状态框架和创建存档的线程中生成通信.这就是为什么我在存档线程中创建JFrame以更新当前的进度条.

但就像我可以在潜水员信息源和你的答案/评论中阅读它,它反对java摇摆和性能; 我无法在EDT的其他地方创建摆动对象.

但那么,我该如何解决我的问题呢?

Ste*_*eod 7

EDT - 事件派发线程 - 与任何具体的GUI组件(例如JFrame)分开.

通常,您应该在EDT上创建所有GUI组件,但这并不意味着它们拥有EDT,EDT也不拥有组件.

要在EDT上创建两个JFrame,您可以执行以下操作:

public static void main(String[] args) {

    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            JFrame frame1 = new JFrame("Frame 1");
            frame1.getContentPane().add(new JLabel("Hello in frame 1"));
            frame1.pack();
            frame1.setLocation(100, 100);
            frame1.setVisible(true);
        }
    });

    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            JFrame frame2 = new JFrame("Frame 2");
            frame2.getContentPane().add(new JLabel("Hello in frame 2"));
            frame2.pack();
            frame2.setLocation(200, 200);
            frame2.setVisible(true);
        }
    });

}
Run Code Online (Sandbox Code Playgroud)


Chr*_*ung 5

Event Dispatch Thread是固定的.它不会因为你在另一个线程上创建一个Swing对象而被重新分配(你永远不应该这样做).