2017-12-04 2 views
-1

私のプログラムは起動に時間がかかりますので、そのための「読み込み」画面を作成したいと思います。つまり、フレームまたはJOptoinPaneを別のスレッドですぐに実行できます(以下の試行を参照)。遅れは、以下のコードでThread.sleep(3000)によってシミュレートされます。2番目のスレッドは、最初に終了するまでguiを更新しません。

問題は、JOptoinPaneが表示されますが、3秒の遅延が終わるまでブランクのままで、通常のように表示されます。別のフレームに変更された場合も同じ動作です。フレームがロードされますが、時間がなくなるまで空です。

プログラムの残りの部分が読み込まれるまで読み込まれない読み込み画面はあまり役に立ちません。これをどうすれば解決できますか?

import java.awt.EventQueue; 

import javax.swing.JFrame; 
import javax.swing.JOptionPane; 
import javax.swing.SwingUtilities; 

public class LoadingTry implements Runnable{ 

    private JFrame frame; 

    public static void main(String[] args) { 

     EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       try { 
        LoadingTry window = new LoadingTry(); 
        window.frame.setVisible(true); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 
    } 


    Thread thread1 = new Thread() { 
     public void run() { 
      JOptionPane.showMessageDialog(null, "Intializing..."); 

     } 
    }; 

    public LoadingTry() { 
     thread1.start(); 

     initialize(); 
    } 


    private void initialize() { 
     try { 
      Thread.sleep(3000); 
     } catch (InterruptedException e) {} 
     frame = new JFrame(); 
     frame.setBounds(100, 100, 450, 300); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 

    @Override 
    public void run() {} 

} 
+2

をJFrameのでのJOptionPaneを交換し、効果的な静的スプラッシュスクリーンを持つことができます

 try { LoadingTry window = new LoadingTry(); window.frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); }); 

は常に困難秒であります時間:https://docs.oracle.com/javase/tutorial/uiswing/misc/splashscreen.html –

+0

最初のホイールは私にはかなり難しいようです – Blaine

答えて

0

この部分を削除:へ

EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       try { 
        LoadingTry window = new LoadingTry(); 
        window.frame.setVisible(true); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 

変更を:ホイールを発明あなたはまた、

関連する問題