私は現在、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 秒以上表示されます。
ロードスレッドが実行されている限り、メッセージを表示できるかどうか疑問に思っています。長くも短くもない。
前もって感謝します!