gpt4 book ai didi

Java:GUI 必须在 EDT 线程中初始化?

转载 作者:行者123 更新时间:2023-11-30 06:39:41 25 4
gpt4 key购买 nike

我是杰森。我对 Substance 的外观和感觉有点问题 ( https://substance.dev.java.net/ )。

我的问题比较笼统。我已经编写了我的 GUI,它运行良好,但是当我使用 Substance 外观时,它需要在 EDT 线程(事件调度线程或其他东西)中进行所有 GUI 初始化。

现在我正在使用 com.sun.java.swing.plaf.windows.WindowsLookAndFeel(不确定我是否拼写正确)并且它不需要任何此类东西。

所以我通过调用 SwingUtilities.invokeLater() 将主要初始化放入 EDT。这使它起作用了。但是,该程序在执行期间还会生成其他几个窗口。现在我有这样的代码:

SomeNewWindow window = new SomeNewWindow();
// ... some bs emitted
window.doStuff();

此代码工作正常,因为在调用 window.doStuff() 时,它已经初始化。但是 Substance 要求我做这样的事情:

SwingUtilities.invokeLater(new Runnable(){
public void run(){
SomeNewWindow window = new SomeNewWindow();
}});
// ... bs emitted
window.doStuff();

这里它有时会抛出 NullPointerException,因为在调用 window.doStuff() 时窗口没有初始化。我不能将 window.doStuff() 放入 EDT 线程,因为它通常需要几秒钟才能返回并且会挂起 GUI。

我尝试在调用 EDT 线程之后立即放置 Thread.sleep(1000),因为它可能在那时已经初始化。但这似乎很尴尬。我只需要一种方法让主线程在 SomeNewWindow 初始化返回时“知道”,这样它就可以继续进行而不必担心 NullPointerException。

提前致谢。

最佳答案

您可以从 invokeLater 切换到 invokeAndWait,后者将等待窗口创建。这有点俗气,但没有休眠那么糟糕。

关于Java:GUI 必须在 EDT 线程中初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/573826/

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