虽然循环没有执行jframe实现

时间:2016-05-24 16:33:52

标签: java swing while-loop

所以基本上我有一个公共静态void main方法创建一个框架和一个级别,该级别是一个面板,然后添加到jframe但后来代码似乎没有检查我的while循环我知道它不会因为我的while循环应该被检查,只要框架是可见的,它应该在控制台窗口中打印一条线,如果它到达这一点,它不会。 任何帮助,将不胜感激!同样是的我知道打印线会弹出一个控制台窗口窗口而不是实际把它放在框架中我为这个while语句提出了一个单独的函数我只是使用println进行调试。

public class Main extends JFrame 
{
  public static void main(String[]args)
  {
  System.out.println("LevelStart");
  LevelOne l = new LevelOne();
  //Level Two not made yet just a place holder to show constructor with a different type
  LevelTwo l2 = new LevelTwo();
  //I make l2 first because the front frame is the last one created
  Main m = new Main(l2);
  Main m2 = new Main(l);
  //To switch levels i am going to load them all in advance and then when the beat the level it will close the frame


  while (m2.isVisible())
   {
      System.out.println("If this displays something is wrong with my checkWin method"); 
      if(l.checkWin())
     {
       System.out.println("If this displays something is wrong with my checkWin method");

     }  
    }
   }
  }

2 个答案:

答案 0 :(得分:2)

您不需要while循环。一旦你创建并使一个JFrame可见,框架将保持打开直到用户关闭框架,Swing就是事件驱动。

此外,如果你需要子窗口,那么你应该使用JDialog,而不是另一个JFrame。

阅读How to Make Frames上Swing教程中的部分,以获取一个简单示例,以帮助您入门。

答案 1 :(得分:2)

您的while循环违反了Swing线程规则,应该删除。

无论如何,你应该改进程序设计。您不应该创建新的JFrame对象,而应该创建一个使用CardLayout的JPanel,使用JPanel将所有级别的JPanel添加到此CardLayout,在添加级别时使用唯一的String常量。然后,您可以通过调用相应的CardLayout方法轻松交换关卡,next(...)show(...)