我目前正在学习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