2

我正在尝试制作一个 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(message) 放在程序的主要部分中,但这似乎也不起作用。任何帮助我都会非常感激。

4

1 回答 1

5

您的问题是由于 Swing 并发造成的。您正在 Swing 事件线程上运行一个长时间运行的进程,这会阻止事件线程绘制。解决方案:使用后台线程,例如 SwingWorker。

有关这方面的更多信息,请参阅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。
  • 不要设置组件的大小,而是让它们自己调整大小。
于 2013-07-10T00:09:35.473 回答