gpt4 book ai didi

java - Swing 组件加载时间太长?

转载 作者:行者123 更新时间:2023-12-01 10:08:00 25 4
gpt4 key购买 nike

我遇到过任何类型的 Swing 组件加载时间过长大约一天的问题。我尝试使用不同的IDE,我更新了Java JDK,但是任何类型的swing组件都需要很长时间才能加载,我目前在我的引擎中使用它来加载项目并保存,但是它需要很长时间才能显示,所以我创建了一个空程序,仅执行以下操作:

import javax.swing.JOptionPane;

public class main {
public main() {
}

public static void main(String[] args) {
long now = System.currentTimeMillis();
int result = JOptionPane.showOptionDialog(null, "Save before quitting ?", "Red Engine", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, null, null);
System.out.println(System.currentTimeMillis() - now + "ms");
}
}

这是结果:5015ms因此加载它需要五秒钟,我在初始化 JFrame 时也遇到了同样的问题。

import javax.swing.JFrame;

public class main {
public main() {
}

public static void main(String[] args) {
long now = System.currentTimeMillis();
JFrame frame = new JFrame();
System.out.println(System.currentTimeMillis() - now + "ms");
}
}

这是结果:4505ms

那么 Java 到底怎么了?这太令人沮丧了。顺便说一句,我正在使用 jdk1.8.0_77。

感谢您的帮助。

最佳答案

问题是,当您创建 Swing 框架/对话框时,您就启动了巨大的 Swing 机制。 Swing 需要至少 3 个额外线程才能工作,因此 Swing 应用程序的启动时间可能比控制台应用程序稍长(但最少)。

我尝试重现您的结果,但帧创建仅用了 50 毫秒(总共 80 毫秒)。即使当我初始化主线程中的所有小部件时,我也会得到相同的结果。为了获得正确的结果,您应该在 Swing 事件调度程序线程 (EDT) 中初始化所有 Swing 小部件。这是我的代码:

public class SwingTest {

public static void main(String[] args) throws Exception {
final long now = System.currentTimeMillis();
// for correct result wee need to do all in the swing thread
SwingUtilities.invokeAndWait(new Runnable() {

@Override
public void run() {
final JFrame f = new JFrame();
System.out.println(System.currentTimeMillis() - now);
f.pack();
f.setVisible(true);
}
});
System.out.println(System.currentTimeMillis() - now);
}
}

关于java - Swing 组件加载时间太长?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36325473/

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