我的应用程序的主框架启动了一个JFrame线程:
IBM1622GUI cardReadPunchGUI = new IBM1622GUI(); // instantiate
Thread cardReadPunchThread = new Thread(cardReadPunchGUI); // alloc thread
cardReadPunchThread.start(); // call thread's run() method
稍后,主框架需要“销毁”IBM1622GUI(作为“使外围设备脱机”的一部分),并且稍后需要重新实例化 - 可能使用与上述相同的过程。主框架应该做什么才能基本上返回到IBM1622GUI首次实例化之前的状态?
编辑 - 我应该提到IBM1622GUI,即JFrame类,正在使用NetBeans作为“Swing GUI表单”进行开发,因此对源代码的编辑有一定的限制。
答案 0 :(得分:2)
您应该使用此样式初始化JFrame。
IBM1622GUI cardReadPunchGUI = null;
SwingUtilities.invokeLater(new Runnable() {
public void run() {
cardReadPunchGUI = new IBM1622GUI();
}
});
When you want to close the JFrame, here is already the question with answers
(由Chap编辑:链接的SO线程很长很蜿蜒,但归结为简单地使用cardReadPunchGUI.dispose()
。事实上,这确实可以令人满意地回答我的问题,我想给予信任对于这个答案,但我也希望包括这个说明。)
答案 1 :(得分:2)
听起来你想要suspend()
和resume()
cardReadPunchThread
。虽然不推荐使用这些方法,但您可以使用Java Thread Primitive Deprecation中概述的方法来控制模型。或者,javax.swing.Timer
的实例稍微容易stop()
和start()
,如建议的here。在视图方面,setVisible()
可能有效,具体取决于您的设计。