我使用接受浏览器请求的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?
答案 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();
}
}
});