- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是杰森。我对 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/
我是一名优秀的程序员,十分优秀!