java中的线程问题

java中的线程问题,java,Java,我制作了一个聊天应用程序,它使用服务器和客户端进行通信。 在服务器GUI上,我制作了一个“开始”按钮,它应该通过调用线程来运行服务器。 我的问题是,当我单击“开始”按钮时,另一个GUI窗口将启动,而不仅仅是更新旧的GUI窗口并启动服务器 这是我的密码: 线程代码: public class SerTest implements Runnable{ @Override public void run(){ Server serv = new Server(); serv.setDe

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

我相信这就是您在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();
}

虽然我根本不用秋千。我认为你不允许在另一个线程上设置内容。我相信这一切都必须在网络上运行。我指的是
serv.setDefaultCloseOperation(JFrame.EXIT\u ON\u CLOSE)在您的Runnable中。

对于给定的代码,绝对是预期的行为!在按钮单击处理程序中,创建SerTest类的一个新实例,然后创建一个服务器类的新实例,该实例似乎是gui并启动它……为什么要在actionListener中创建一个新的SerTest对象?第二,当您创建SerTest类的对象时是否创建了一个新窗口?为什么您的服务器首先有一个gui?这使得事情变得比必要的更复杂。