我目前正在學習Java中的多線程,並遇到了一個有趣的問題。 我有一個「裝載機」類讀取一些CSV文件。另一個線程正在運行時執行任務
public class LoaderThread implements Runnable{
@Override
public void run(){
//do some fancy stuff
}
}
此外我有一個SplashScreen,我想在數據加載時顯示。
import javax.swing.JLabel;
import javax.swing.JWindow;
import javax.swing.SwingConstants;
public class SplashScreen extends JWindow{
JWindow jwin = new JWindow();
public SplashScreen(){
jwin.getContentPane().add(new JLabel("Loading...please wait!",SwingConstants.CENTER));
jwin.setBounds(200, 200, 200, 100);
jwin.setLocationRelativeTo(null);
jwin.setVisible(true);
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
jwin.setVisible(false);
jwin.dispose();
}
}
的代碼是從我的主類,當用戶點擊一個按鈕來運行:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
final Thread t = new Thread() {
@Override
public void run() {
LoaderThread myRunnable = new LoaderThread();
Thread myThread = new Thread(myRunnable);
myThread.setDaemon(true);
myThread.start();
while(myThread.isAlive()==true)
{
SplashScreen ss = new SplashScreen();
}
}
};
t.start(); // call back run()
Thread.currentThread().interrupt();
}
這種設置工作,但該消息被「閃」的時候,加載需要更長的時間超過3秒和顯示至少3秒,即使加載過程可能更短。
我現在想知道只要加載線程正在運行,是否可以顯示消息。不再更長,也不更短。
在此先感謝!
感謝,將有一個看的SwingWorker! 「你也不要在Swing事件線程上調用Thread.sleep ...」是什麼意思? – user1204121
@ user1204121:請編輯1和編輯2. –
運行完美 - 非常感謝! – user1204121