我应该如何关闭并重新启动Swing JFrame线程

时间:2011-08-03 00:14:56

标签: java multithreading swing jframe

我的应用程序的主框架启动了一个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表单”进行开发,因此对源代码的编辑有一定的限制。

2 个答案:

答案 0 :(得分:2)

Read this

您应该使用此样式初始化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()可能有效,具体取决于您的设计。