Java,如何正确启动一个JFrame应用程序,并在其中使用可启动和可暂停的线程?
我决定启动java应用程序的第3版,并想知道我是否以正确的方式启动该应用程序。我以前问过,得到了很多不同的答案 我刚刚启动了一个netbeans Java应用程序,并在一个JFrame中绘制了所有组件。在我的版本2中,我是这样启动程序的 代码:(这也是目前为止的版本3) 我正在创建一个windows应用程序,我希望能够在其中(安全地)启动一个线程,通过Robot类模拟用户操作。我希望能够允许用户按下CLSuiteMain对象上的切换按钮,并启动和暂停此线程。当主JFrame安全退出时,线程也安全退出 那么首先,我是否安全地启动了这个线程来完成我想做的事情?如何在应用程序中正确、安全地实现另一个线程,使其能够按照所述执行Java,如何正确启动一个JFrame应用程序,并在其中使用可启动和可暂停的线程?,java,multithreading,swing,jframe,Java,Multithreading,Swing,Jframe,我决定启动java应用程序的第3版,并想知道我是否以正确的方式启动该应用程序。我以前问过,得到了很多不同的答案 我刚刚启动了一个netbeans Java应用程序,并在一个JFrame中绘制了所有组件。在我的版本2中,我是这样启动程序的 代码:(这也是目前为止的版本3) 我正在创建一个windows应用程序,我希望能够在其中(安全地)启动一个线程,通过Robot类模拟用户操作。我希望能够允许用户按下CLSuiteMain对象上的切换按钮,并启动和暂停此线程。当主JFrame安全退出时,线程也安全
- 也就是说,我想启动应用程序,点击切换按钮,线程在循环中启动,并继续执行相同的步骤,直到用户再次点击切换,此时它停止执行循环,并将继续点击切换按钮。(另外,如何将线程执行重置为循环的开始?)
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent event) {
exitProcedure();
}
});
退出过程方法如下所示
public void exitProcedure() {
thread.stopProcessing();
frame.dispose();
System.exit(0);
}
您可以在按住切换按钮的JPanel中任意位置创建新线程。线程实例应该是GUI数据模型的一部分。您可以将GUI数据模型的实例传递给所有视图组件
您可以在toggle按钮的action listener中启动线程,并在那里暂停线程
对于您的额外问题,您必须有另一个常规JButton来重新启动线程,并在其操作侦听器中将切换按钮设置为线程运行状态
必须对线程类进行编码,以便它可以重新启动、暂停和停止
也就是说,我想启动应用程序,点击切换按钮,线程在循环中启动,并继续执行相同的步骤,直到用户再次点击切换,此时它停止执行循环,并将继续点击切换按钮。(另外,如何将线程执行重置为循环的开始?)
嗯
创建所有GUI组件。您的JFrame必须设置这些方法
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent event) {
exitProcedure();
}
});
退出过程方法如下所示
public void exitProcedure() {
thread.stopProcessing();
frame.dispose();
System.exit(0);
}
您可以在按住切换按钮的JPanel中任意位置创建新线程。线程实例应该是GUI数据模型的一部分。您可以将GUI数据模型的实例传递给所有视图组件
您可以在toggle按钮的action listener中启动线程,并在那里暂停线程
对于您的额外问题,您必须有另一个常规JButton来重新启动线程,并在其操作侦听器中将切换按钮设置为线程运行状态
必须对线程类进行编码,以便它可以重新启动、暂停和停止。因此,我以正确的方式启动了JFrame。使用调用Runnable的EventQueue.InvokeLater?那么,我可以创建一个扩展线程的类的实例吗?在这个线程扩展类中,在“run”方法中执行while(true){Robot Actions}。要暂停,请在togglebuttons actionPerformed方法中调用ExtendedThreadClassInstance.pause和.continue?@Bumsketer:是。在doProcess方法中对进程进行编码,以便可以从restart方法调用它。您的run方法将调用doProcess方法。因此,我以正确的方式启动了JFrame。使用调用Runnable的EventQueue.InvokeLater?那么,我可以创建一个扩展线程的类的实例吗?在这个线程扩展类中,在“run”方法中执行while(true){Robot Actions}。要暂停,请在togglebuttons actionPerformed方法中调用ExtendedThreadClassInstance.pause和.continue?@Bumsketer:是。在doProcess方法中对进程进行编码,以便可以从restart方法调用它。您的run方法将只调用doProcess方法。