gpt4 book ai didi

java - 具有多个 JFrame 窗口的 EDT 位置

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:31:04 24 4
gpt4 key购买 nike

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

编辑:感谢您的回答。

我理解他们,我同意他们。我知道我们不必在 EDT 的其他地方创建 swing 对象,但我遇到了问题。

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

但是就像我可以在不同的信息源和您的回答/评论中看到它一样,它反对 java swing 和性能;我无法在 EDT 的其他地方创建 swing 对象。

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

最佳答案

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);
}
});

}

关于java - 具有多个 JFrame 窗口的 EDT 位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7205537/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com