我目前正在学习 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 秒时,消息“闪烁”,即使加载过程可能更短。
我现在想知道只要加载线程正在运行,是否可以显示消息。不长也不短。
提前致谢!