2011-09-03 81 views
0

我剛剛下載了Eclipse,並在做HelloWorldSWT教程以熟悉IDE。HelloWorldSWT eclipse發生運行時問題

程序運行,但與主循環中的display.sleep()相反,程序繼續佔用CPU週期。這個教程是否正常?我該如何預防呢?

import org.eclipse.swt.widgets.Display; 
import org.eclipse.swt.widgets.Shell; 

public class HelloWorldSWT { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 

     Display display = new Display(); 
     Shell shell = new Shell(display); 
     shell.setText("Hello world!"); 
     shell.open(); 
     while(!shell.isDisposed()){ 
      display.sleep(); 
     } 
     display.dispose(); 
     shell.close(); 
    } 

} 

編輯:我發現

if (!display.readAndDispatch()) {display.sleep();} 

解決問題。然而,我仍然不明白檢查非易失事件,然後告訴顯示器進入睡眠狀態,並告訴顯示器進入睡眠狀態會導致此問題。

回答

2

您需要致電display.readAndDispatch()從事件隊列中讀取事件並對其執行操作(派送)。

即使是來自Shell的停用事件也必須發送!

所有基於SWT的應用程序都有一個事件循環,就像你添加到你的文章中一樣。有關更多示例,請參閱SWT Snippets

1

這是你如何創建這個項目。正確的關係需要在開始時應用依賴關係集和庫集。

我得到它的工作,然後玩弄它,看看有什麼潛在的原因,因爲有很多博客與各種提示,與一些人,而不是與其他人合作的博客。

主要的一點是,這是必要的

import org.eclips.swt.widget.Display 
import org.eclips.swt.widget.Screen