저는 현재 Java로 멀티 스레딩에 대해 배우고 있으며 흥미로운 문제가 있습니다. 일부 CSV 파일을 읽는 "loader"클래스가 있습니다.다른 스레드가 실행되는 동안 작업 수행
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();
}
}
코드는 내 주요 클래스에서 실행 :이 설정은 작동하지만 부하가 이상 3 초를 소요 할 때 메시지는 "깜박"입니다
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 초 동안 표시됩니다.
로딩 스레드가 실행되는 동안 메시지를 표시 할 수 있는지 궁금합니다. 더 이상 짧지 않습니다.
미리 감사드립니다.
감사합니다. SwingWorker를 살펴보십시오! "Swing 이벤트 스레드에서 Thread.sleep을 호출하지 마십시오 ..."라는 의미는 무엇입니까? – user1204121
@ user1204121 : 1을 편집하고 2를 편집하십시오. –
완벽하게 작동합니다. - 고맙습니다. – user1204121