2014-02-08 23 views
1

我執行以下代碼執行:的Java:語句不是爲了

lnum.setVisible(false); 
    Lsums.setVisible(false); 
    Ldigits.setVisible(false); 
    Lrows.setVisible(false); 
    L1.setVisible(false); 
    t1.setVisible(false); 
    t2.setVisible(false); 
    t3.setVisible(false); 
    Button.setVisible(false); 
    Done.setText("Done!"); 
    System.out.println("Done!"); 
    //setting everything invisible and printing Done on the screen 
    try { 
     Thread.sleep(5000); 
    } catch(InterruptedException ex) { 
     Thread.currentThread().interrupt(); 
    } 
    System.exit(0); 

應根據我發生什麼事:「完成」完成標籤設置爲文本然後println,然後等待5秒,然後程序關閉。但是,發生的事情是;它確實println,然後等待5秒,但它從來沒有將完成標籤設置爲完成! 爲什麼?

更新1 注意,如果我只是刪除睡眠try和catch塊,然後它做的事情,然後顯示處理得當,但不一樣,如果睡眠塊存在

更新2爲什麼它不是先輸出它然後睡覺?爲什麼? [就像在答案中他們說,它會掛,好吧,我明白了,但如果我已經寫了,它應該設置標籤,它應該設置它,然後暫停後設置它爲什麼之前???]

如果它是仍然不清楚:看看我想要做的是,1.使某些物品不可見2.更改標籤的文字3.等待5秒4.自動退出 按此確切順序。

+0

'Done'是什麼嗎?向我們展示您的完整代碼? –

+0

我們可以看到完成對象嗎? – Esqarrouth

+3

你在哪個線程執行此代碼?它是EDT線程嗎? – Taky

回答

3

您睡在事件調度線程(EDT)中,您凍結了您的UI,並且Swing無法刷新標籤標題。在這種情況下,您只是更改了標籤的型號。這意味着下次繪畫時擺動將使用新模型狀態(新文本)。而當你凍結這個線程並退出應用程序時,你不會給任何機會用新文本重新繪製標籤。

EDT - 是所有組件在屏幕上繪製的特殊線程。當您調用Thread#sleep()時,您會阻止EDT和擺動無法重新繪製您的標籤。睡眠完成後,退出進程,Swing無法重新繪製新文本。

只要嘗試刪除System.exit()調用。

如果您想在標籤更改後的5秒鐘後退出應用程序,您可以在單獨的主題中調用System#exit()調用。就像在任何多線程環境中一樣,您不能等待5秒,您可以建議操作系統調度程序在5秒內執行操作。它將取決於CPU上的CPU負載。但在正常ENV當標籤改變

考慮下面的代碼應該效仿一些暫停(它不是生產水平,但應工作):

new Thread(new Runnable() { //create new thread 
    @Override 
    public void run() { 
     try { 
      Thread.sleep(5000); //wait here 
     } catch(InterruptedException ex) { 
      ex.printStackTrace(); 
     } 
     System.exit(0); //kill Java process 
    } 
}).start(); //start new thread 
//EDT thread should continue executing 
+0

你能告訴我們代碼應該如何嗎? –

+0

那麼我該如何退出我的程序呢?我想讓它退出:P –

+0

@DakshShah所以你想更改UI狀態並以編程方式關閉程序? – Taky

0
Done.setText("Done!"); 
    try { 
     Thread.sleep(5000); 
     System.out.println("Done!"); 
    } catch(InterruptedException ex) { 
     Thread.currentThread().interrupt(); 
    } 
    System.exit(0); 
+0

這是錯誤的,仍然是同樣的問題 –