JLabel说“请等待”没有运行

时间:2013-07-10 00:03:31

标签: java swing jframe jlabel

我正在尝试创建一个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);

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

1 个答案:

答案 0 :(得分:5)

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

有关详情,请参阅Concurrency in Swing

此外,

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);
  • 这看起来好像您将辅助窗口显示为JFrame,这不是一个好主意。而是使用JDialog。
  • 不要设置组件的大小,而是让它们自己调整大小。