我目前有一个由NetBeans创建的JFrame。大多数情况下,当我运行程序时它完全正常 - GUI出现,组件正确,我设置的值是正确的等等。
然而,每隔一段时间,GUI就会失败。只是......没有出现。没有框架出现。更糟糕的是,Java仍然为JFrameInstance.isVisible()返回true并强制我手动终止该程序。换句话说,该计划不会停止。我还没有找到答案。
我的代码,没有多余的设置代码:
public class Setup extends javax.swing.JFrame {
/** Creates new form Setup */
public Setup() {
initComponents();
customComponents();
setVisible(true);
}
private void customComponents() {
setTitle("Setup");
setPatchNotesText(Browser.getVersionNotes());
jSlider1.setValue(SettingsHandler.getDelayTime());
jCheckBox1.setSelected(SettingsHandler.getCheckPaxWebsite());
//More of the same type of code...
}
public void setPatchNotesText(final String text) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
jTextArea4.setText(text);
jTextArea4.setCaretPosition(0);
}
});
}
private void initComponents() {
jTabbedPane1 = new javax.swing.JTabbedPane();
jPanel1 = new javax.swing.JPanel();
jLabel1 = new javax.swing.JLabel();
//Lots more component construction...
jLabel5.setText("Setup Options");
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
//....Begin the huge NetBeans GUI setup code. Removed for readability.
}
}
main()方法中的代码......
public static void main(String[] args) throws Exception {
System.out.println("Initializing...");
Browser.init();
Email.init();
setup = new Setup();
while (setup.isVisible()) { // Returns true...
Thread.sleep(100);
}
//More code...
}
答案 0 :(得分:1)
您的症状描述了一个典型的线程问题 - 即使代码未更改,也会间歇性地出现问题。看起来你的真实可能是罪魁祸首。我建议你改为考虑:
修改强> 你发表评论:
我希望我的main()线程暂停直到GUI关闭 - 除了使用volatile布尔值之外,还有什么方法可以在线程之间进行吗?
是的,有一些很多更好的解决方法: