2

我有执行很长模型的 java 方法。大约需要20分钟。当我按下按钮时,按钮保持按下状态,直到模型完成。我需要创建一个按钮,当被按下时,它会停止模型执行到目前为止,我有 2 个按钮:停止和启动。我的问题是,当我按下开始按钮时,GUI 中的所有按钮都被冻结,并且在模型完成之前无法按下

如何创建停止按钮?

谢谢,

约努特

4

4 回答 4

3

您应该使用SwingWorker. 它们为在 EDT 之外执行长时间运行的任务而设计,同时仍能够使用进度报告更新 GUI。

于 2013-07-29T17:44:38.643 回答
2

最好在单击按钮后启动线程。如果线程尚未完成,您可以制作一个停止按钮来停止线程。为此,您将不得不跟踪线程(例如在静态变量中)。

线程快速指南:http ://www.tutorialspoint.com/java/java_multithreading.htm

请也看看这个:如何正确停止 Java 中的线程?.

于 2013-07-29T17:30:01.403 回答
0

你必须使用多线程。一个基本的例子——

public class ThreadTest {

    private int getSum(int x, int y){
        return x + y;
    }

    public static void main(String args[]) {

        ThreadTest tTest = new ThreadTest();        
        System.out.println(tTest.getSum(2, 5));
        // Start the thread
        new LongProcess().start();        
        // Since the thread sleeps for two seconds
        // You will see 5 + 5 = 10 before Done! gets printed out
        System.out.println(tTest.getSum(5, 5));

    }
}

class LongProcess extends Thread {

    public LongProcess(){
        System.out.println("Thread started.."); 
    }

    public void run() {
        try{                   
            Thread.sleep(2000);
            System.out.println("Done!");        
        } catch(InterruptedException iEx){
            System.out.println(iEx.toString());        
        }
    }
}
于 2013-07-29T17:38:00.727 回答
0

如果您正在执行一个响应按钮单击的 20 分钟任务,您可能应该在后台线程中执行它。

于 2013-07-29T17:30:11.460 回答