JLabel说"请等待"没有运行

Dav*_*idR 2 java swing jlabel jframe

我正在尝试创建一个java应用程序,并在使用Swing从用户获取一些输入数据后,我开始运行我的程序的主要计算块(不是主要的方法只是为了清楚).当这个方法运行时,我想显示"请等待......别碰任何东西"的内容.然而,问题是我用来显示这个的JPanel在方法持续时间内完全变黑正在进行计算的是.我试图在方法的中间打印JLabel.getText(),它按照预期出来.任何关于为什么文本不会出现的想法.以下是我的代码.

JFrame toDisplay = new JFrame("Please Wait");
  toDisplay.setAlwaysOnTop(true);
  toDisplay.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  toDisplay.setVisible(true);
  toDisplay.setLayout(new FlowLayout());
  toDisplay.setSize(300,200);
  toDisplay.setLocation((int)dimension.getWidth()/3, (int)dimension.getHeight()/3);

  JLabel message = new JLabel("<html>CheapTix is currently running<br /> please do not close this box or open the file <br /> Destinations.txt <br /> until instructed to do so</html>");
  toDisplay.add(message,BorderLayout.CENTER);
Run Code Online (Sandbox Code Playgroud)

接下来是我的程序的主要部分运行.我已经尝试将toDisplay.add(消息)放在我程序的主要部分内,但这似乎也没有用.任何帮助我都非常感激.

Hov*_*els 5

你的问题是由于Swing并发.您正在Swing事件线程上运行一个长时间运行的进程,这可以防止事件线程被绘制.解决方案:使用后台线程,例如SwingWorker.

有关这方面的更多信息,请参阅Swing中的Concurrency

也,

JFrame toDisplay = new JFrame("Please Wait");
  toDisplay.setAlwaysOnTop(true);
  toDisplay.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  toDisplay.setVisible(true);
  toDisplay.setLayout(new FlowLayout());
  toDisplay.setSize(300,200);
  toDisplay.setLocation((int)dimension.getWidth()/3, (int)dimension.getHeight()/3);

  JLabel message = new JLabel("<html>CheapTix is currently running<br /> 
      please do not close this box or open the file <br /> 
      Destinations.txt <br /> 
      until instructed to do so</html>");
  toDisplay.add(message,BorderLayout.CENTER);
Run Code Online (Sandbox Code Playgroud)
  • 这看起来好像您将辅助窗口显示为JFrame,这不是一个好主意.而是使用JDialog.
  • 不要设置组件的大小,而是让它们自己调整大小.