You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java GUI构造函数被调用两次致双窗口弹出问题求助

解决GUI构造函数被调用两次的问题

问题根源

  • Servidor是继承自RummyClient的静态内部类,当你在main方法中创建Servidor实例时,会触发父类RummyClient的成员初始化,执行public GUI gui = new GUI();,生成第一个窗口。
  • 紧接着你又创建了RummyClient的实例并启动线程,这会再次执行public GUI gui = new GUI();,生成第二个窗口。

解决方案

方案一:将GUI实例改为静态单例

把RummyClient中的gui成员改为静态,确保全局只初始化一次:

public class RummyClient implements Runnable{
    // 改为静态单例,仅初始化一次
    public static GUI gui = new GUI();
    public static Servidor servidor;

    // 后续代码保持不变...
}

方案二:让Servidor不再继承RummyClient

调整Servidor的结构,避免不必要的继承关系:

public class RummyClient implements Runnable{
    public GUI gui = new GUI();
    public static Servidor servidor;

    public static void main(String[] args) throws UnknownHostException, IOException {
        RummyClient client = new RummyClient();
        servidor = new Servidor(25565, "localhost", client);
        new Thread(client).start();
    }
    
    @Override
    public void run() {
        while(true) {
            gui.repaint();
        }
    }
    
    // GUI类代码保持不变...
    
    // 修改Servidor,不再继承RummyClient
    static class Servidor {
        Socket s;
        PrintWriter out;
        Scanner in;
        private RummyClient client;

        public Servidor(int port, String ip, RummyClient client) throws UnknownHostException, IOException {
            this.client = client;
            this.s = new Socket(ip, port);
            this.out = new PrintWriter(s.getOutputStream());
            this.in = new Scanner(s.getInputStream());
            Thread input = new Thread(new Input());
            input.start();
        }

        public void send(String text) {
            out.println(text);
            out.flush();
        }

        class Input implements Runnable {
            @Override
            public void run() {
                while(true) {
                    String incoming = in.nextLine();
                    switch (incoming) {
                        case "ready":
                            client.gui.start();
                            break;
                    }
                }
            }
        }
    }
}

内容的提问来源于stack exchange,提问作者user21102712

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 20:15:55