Java 我没有得到两个相似的JFrame,而是得到了一个带有双分量的JFrame

Java 我没有得到两个相似的JFrame,而是得到了一个带有双分量的JFrame,java,swing,jframe,Java,Swing,Jframe,我创建了一个带有按钮、标签和文本的JFrame,我想在执行主程序时显示两次,所以我喜欢这样: import java.net.SocketException; public class Main { public static void main(String[] args) throws SocketException { new MyFrame("client1"); new MyFrame("client2"); } } 结果:我得到

我创建了一个带有按钮、标签和文本的
JFrame
,我想在执行主程序时显示两次,所以我喜欢这样:

import java.net.SocketException;

public class Main {

    public static void main(String[] args) throws SocketException {
        new MyFrame("client1");
        new MyFrame("client2"); 
    }
}
结果:我得到了两个帧:一个包含另一个帧的组件,另一个是空的


如何解决此问题?

您正在对组件的
MyFrame
使用
static
实例字段

组件只能驻留在单个容器中,在创建第二个框架时,静态组件将从第一个容器中删除,然后再添加到第二个容器中

解决办法是,永远不要这样做

我假设您使用的是
static
,因为您希望从另一个类访问这些字段,在这种情况下,您应该在
MyFrame
类中使用getter,并将其引用传递给需要它的类

或者,您可以建立一系列观察者来监视更改并采取适当的操作,这有助于解耦代码


就个人而言,如果您需要以某种方式修改
MyFrame
实例,我会提供setter方法来更新您的组件,因为我不喜欢在没有充分理由的情况下公开UI元素,让其他人有很多机会以适当的方式处理它们您在MyFrame类中使用的是静态实例字段啊,是的,这是真的!1) 请参见2)源代码中的一行空白就是所需的全部内容。
{
之后或
}
之前的空行通常也是多余的。