2017-04-04 52 views
-1

我在主窗体的构造函数中创建了Downloader JFrame类的对象,并在下载按钮单击时调用其setVisiblity(true)方法。Jframe form setVisiblity(true)在方法终止后有效

问题是下载器帧被示出,但是当该方法已经termininated:5秒如何解决后

Downloading dn = new Downloading(); 

private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {           

     dn.setVisible(true); 
     try { 
      Thread.sleep(5000); 
     } catch (InterruptedException ex) { 
      Logger.getLogger(GehuConnectMain.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    }  

的形式示出了?

+0

1)不要阻塞EDT(Event Dispatch Thread)。发生这种情况时,GUI将“冻结”。有关详细信息和修补程序,请参见[Swing中的并发](https://docs.oracle.com/javase/tutorial/uiswing/concurrency/)。 2)请参阅[多个JFrames的使用,好的/坏的实践?](http://stackoverflow.com/q/9554636/418556) –

+0

我应该如何显示等待表单直到另一个类正在下载内容? –

+0

答案在于你在3分钟内显然无法正确阅读的链接。 –

回答

2

简单:

Thread.sleep(5000); 

您在Event Dispatcher Thread睡觉。这会冻结你的整个应用程序。您必须退后一步并查看invokeLater以确保UI中的“正确”线程化。

或者,也许更合适:你为什么打算睡在第一位。用户点击该按钮;你提出了另一个框架。如果你现在必须“等待”别的东西;那么这需要“以不同的方式”发生。

一个典型的答案是例如使用modal对话框。不要试图在这里重新发明轮子。

相关问题