Java 设置可见时JFrame不隐藏(false)

Java 设置可见时JFrame不隐藏(false),java,jframe,Java,Jframe,在setVisible(false)命令之后。JFrame窗口仍然显示在我的桌面上。 我如何修复它?您正在构造函数中创建另一个JFrame。假设您希望您的框架类不可见,请执行以下操作: import javax.swing.*; class Frame extends JFrame{ Frame() { JFrame j = new JFrame(); j.setBounds(100, 200, 120, 120); j.setTitle

在setVisible(false)命令之后。JFrame窗口仍然显示在我的桌面上。
我如何修复它?

您正在构造函数中创建另一个
JFrame
。假设您希望您的
框架
类不可见,请执行以下操作:

import javax.swing.*;

class Frame extends JFrame{
    Frame() {
        JFrame j = new JFrame();
        j.setBounds(100, 200, 120, 120);
        j.setTitle("null");
        j.setVisible(true);
        j.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }
}

public class test001 {

    public static void main (String Args[]){
        Frame f = new Frame();
         System.out.print("Visible = True");

        f.setVisible(false);
        System.out.print("Visible = false");
    }
}

问题是您的主方法使用了与构造函数不同的JFrame。框架构造函数创建新的JFrame实例(使用新的JFrame)。当您调用f.setVisible(false)时,它会转到您的框架,而不是创建的JFrame。

这里的问题是您的“frame”类实例化了一个新的JFrame。在帧上调用setVisible不会影响正在显示的JFrame


您可以通过使用JFrame实例或子类化来修复它。不要两者都做。

除了你所指的两个不同的帧(这就是问题的答案),你应该在EVT线程中完成所有的图形操作(因为你的程序即使对你来说很好,也不能移植到不同的平台)

啊。。我懂了。现在我知道发生了什么。谢谢最好是丢失不必要的子类化。(而且您缺少
main
中的
EventQueue.invokeLater
样板文件)@Alex这是一个附带的答案,但我从这个特定的问题答案开始。你注意到“两个不同的画面”和链接了吗?如果有一个平台由于错误的线程使用而在纠正了两帧问题后仍然无法工作,我不会感到惊讶。我认为主题启动者永远不会知道这一点,因为他上次出现在这里还有两年了。@Alex是的,这是一个相当老的问题(我之前没有注意到)但答案永远在这里(互联网永远不会忘记)。看来我获得了考古学家的徽章:)。我以后会更加小心的。
class Frame extends JFrame {

   Frame() {
      setBounds(100, 200, 120, 120);
      setTitle("null");
      setVisible(true);
      setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
   }
}

public class test001 {

   public static void main(String Args[]) {
      Frame f = new Frame();
      System.out.print("Visible = True");

      f.setVisible(false);
      System.out.print("Visible = false");
   }
}