我刚刚下载了Eclipse并且正在做HelloWorldSWT教程以熟悉IDE。
程序运行,但与主循环中的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();}
解决了这个问题。但是,我仍然不明白检查不存在的事件然后告诉显示器睡眠并告诉显示器睡眠会导致此问题的区别。
答案 0 :(得分:2)
您需要调用display.readAndDispatch()
来读取事件队列中的事件并对其进行操作(调度)。
即使是来自Shell
的停用事件也必须发送!
所有基于SWT的应用程序都有一个事件循环,就像您添加到帖子中的事件循环一样。有关更多示例,请查看SWT Snippets。
答案 1 :(得分:1)
这是您创建导致此问题的项目的方式。需要在开始时应用正确的关系,并设置依赖关系和库。
我得到它的工作,然后玩它,看看是什么是潜在的原因,因为有很多博客的各种提示与一些人合作,而不与其他人合作。
要点是必要的
import org.eclips.swt.widget.Display
import org.eclips.swt.widget.Screen