Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java,如何正确启动一个JFrame应用程序,并在其中使用可启动和可暂停的线程?_Java_Multithreading_Swing_Jframe - Fatal编程技术网

Java,如何正确启动一个JFrame应用程序,并在其中使用可启动和可暂停的线程?

Java,如何正确启动一个JFrame应用程序,并在其中使用可启动和可暂停的线程?,java,multithreading,swing,jframe,Java,Multithreading,Swing,Jframe,我决定启动java应用程序的第3版,并想知道我是否以正确的方式启动该应用程序。我以前问过,得到了很多不同的答案 我刚刚启动了一个netbeans Java应用程序,并在一个JFrame中绘制了所有组件。在我的版本2中,我是这样启动程序的 代码:(这也是目前为止的版本3) 我正在创建一个windows应用程序,我希望能够在其中(安全地)启动一个线程,通过Robot类模拟用户操作。我希望能够允许用户按下CLSuiteMain对象上的切换按钮,并启动和暂停此线程。当主JFrame安全退出时,线程也安全

我决定启动java应用程序的第3版,并想知道我是否以正确的方式启动该应用程序。我以前问过,得到了很多不同的答案

我刚刚启动了一个netbeans Java应用程序,并在一个JFrame中绘制了所有组件。在我的版本2中,我是这样启动程序的

代码:(这也是目前为止的版本3)

我正在创建一个windows应用程序,我希望能够在其中(安全地)启动一个线程,通过Robot类模拟用户操作。我希望能够允许用户按下CLSuiteMain对象上的切换按钮,并启动和暂停此线程。当主JFrame安全退出时,线程也安全退出

那么首先,我是否安全地启动了这个线程来完成我想做的事情?如何在应用程序中正确、安全地实现另一个线程,使其能够按照所述执行

  • 也就是说,我想启动应用程序,点击切换按钮,线程在循环中启动,并继续执行相同的步骤,直到用户再次点击切换,此时它停止执行循环,并将继续点击切换按钮。(另外,如何将线程执行重置为循环的开始?)
我不是在寻找完整的代码或其他东西,如果可能的话,可能是一个简单的伪代码示例,如果没有任何其他帮助,我们将不胜感激

也就是说,我想启动应用程序,点击切换按钮,线程在循环中启动,并继续执行相同的步骤,直到用户再次点击切换,此时它停止执行循环,并将继续点击切换按钮。(另外,如何将线程执行重置为循环的开始?)

创建所有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来重新启动线程,并在其操作侦听器中将切换按钮设置为线程运行状态

必须对线程类进行编码,以便它可以重新启动、暂停和停止

也就是说,我想启动应用程序,点击切换按钮,线程在循环中启动,并继续执行相同的步骤,直到用户再次点击切换,此时它停止执行循环,并将继续点击切换按钮。(另外,如何将线程执行重置为循环的开始?)

创建所有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方法。