java中的线程问题

时间:2015-12-11 12:35:06

标签: java

我已经制作了一个聊天应用,它使用服务器和客户端进行通信。 在服务器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();
        }
    });

in the image you can see what i mean:

1 个答案:

答案 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);