Java:我如何能够创建一个停止Runnable()线程的Stop JButton?

时间:2016-02-07 03:35:06

标签: java multithreading swing

我使用接受浏览器请求的ServerSocket在Java中创建了一个简单的HTTP服务器。服务器运行正常,没有任何错误。我使用Swing创建了一个JForm,其中包含用于启动和停止服务器的按钮。在开始按钮中,我添加了一个运行我的ServerMain类的ActionListener。

btnStartServer.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
    try {
        new Thread(new Runnable() {
            public void run() { 
                ServerMain.main(new String[0]);
            }
         }).start();
        } catch (Exception e) {
        e.printStackTrace();
    }
}});

我如何能够创建一个停止Runnable()线程的Stop JButton?

2 个答案:

答案 0 :(得分:2)

在实现cancel() Future<V>方法的类的上下文中运行服务器。 SwingWorker<T,V>就是这样RunnableFuture<V>;看到一个完整的例子here

答案 1 :(得分:1)

你不想杀死一个线程(使用Thread.stop())。原因列于this article

我假设ServerMain.main(String... args)中的代码运行某种while(condition)循环,如下所示:

public class ServerMain{
    public static boolean condition = true;

    public static void main(String... args){
        while(condition){
            //do stuff
        }
        //close sockets and other streams.
        //Call Thread.interupt() on all sleeping threads
    }
}

您的按钮应该以某种方式将此条件设置为false:

stopButton.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent ae) {
        try {
            new Thread() {
                public void run() {
                    // set condition to false;
                    ServerMain.condition = false;
                }
            }.start();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
});