2010-05-24 80 views
1

我做了一個項目,顯示了一個商店的庫存庫存。
在該清單中,軟件應該將產品的數據與其圖像一起存儲。
有一個問題...
Bcz的大量股票,圖像正在加載屏幕上花了很多時間。
所以,我想我應該給框架中的標籤上會顯示「加載軟件」。
但現在當我設置可見=真的框架,但bcz的圖像屏幕類加載問題我的框架無法正確顯示。我已經把screen shot,現在我的代碼。框架顯示問題

JFrame f; 
    try{ 
      f = new JFrame("This is a test"); 
      f.setSize(300, 300); 
      Container content = f.getContentPane(); 
      content.setBackground(Color.white); 
      content.setLayout(new FlowLayout()); 
      JLabel jl = new JLabel(); 
      jl.setText("Loading Please Wait...."); 
      content.add(jl); 
      f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      f.setVisible(true); 
     }catch(Exception e){ 
      e.printStackTrace(); 
     } 
     initComponents(); 
     try { 
      addInverntory = new AddInventoryScreen(); 
      showstock = new showStock(); // this class will take big time. 
      mf = new mainForm(); 
      f.setVisible(false); 
     }catch (Exception ex) { 
      ex.printStackTrace(); 
     } 

如何在這種情況下顯示一些消息,其他類正在加載或「加載軟件」類的東西。

只爲知道....這個類不是屏幕上的圖像將加載。

回答

3
  1. 這是很難回答這個問題,因爲它不是清楚是什麼效果(Swing的明智)是調用new AddInventoryScreen();new showStock();的。您應該只觸摸用戶在最後看到的UI(當所有處理完成時)。

  2. 你應該真的分離出需要很長時間才能進入他們自己的Thread的方法(請參閱SwingWorker。Java 5.0還有其他選擇)。這樣,UI在處理時不會被阻塞。

  3. 也許你想要的是一個Splash Screen

1

嘗試調用validate();pack();方法調用f.setVisible(true);

你的代碼可以

validate(); 
pack(); 
f.setVisible(false); 
1

我覺得一個大問題在你的代碼(也許不是然而唯一一個)是事實您應該使用不同線程進行長時間操作。

只能在「EDT」中執行GUI操作(創建擺動組件,將它們添加到面板,更改標籤...),並且必須很短(通常小於100ms甚至50ms)。

如果您使用SwingWorker API(JDK 1.6的一部分),則可以通過另一個線程輕鬆完成長操作。