我正在尝试创建一个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(消息)放在我程序的主要部分内,但这似乎也没有用。 任何帮助都会非常感激。
答案 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);