我已经制作了一个聊天应用,它使用服务器和客户端进行通信。 在服务器GUI上我做了一个"开始"应该通过调用线程来运行服务器的按钮。 我的问题是当我点击"开始"按钮的另一个GUI窗口启动,而不是只更新旧的GUI窗口并启动服务器。
这是我的代码:
线程代码:
public class SerTest implements Runnable{
@Override
public void run(){
Server serv = new Server();
serv.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
serv.startRunning();
}
按钮监听器代码:
start_server.addActionListener(
new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
(new Thread((Runnable) new SerTest())).start();
}
});
答案 0 :(得分:0)
我相信这是你在actionPerformed中尝试做的事情,假设你在SerTest中调用此代码开始。
@Override
public void actionPerformed(ActionEvent e) {
//don't allow user to start server when it's already running
//should add something to re-enable this button for when the
//server stops.
((JButton) e.getSource()).setEnabled(false);
//create new Thread pointing Runnable to this instance of SerTest
new Thread(SerTest.this).start();
}
虽然我根本不使用Swing。我不认为你被允许在另一个线程上设置东西。我相信它必须全部在Swing event handler thread上运行。我指的是你的Runnable中的serv.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
。