2014-01-09 18 views
0

有没有办法使用现有的线程(特别是主线程)来使用AWT窗口。我目前正在打开一个Frame,然后处理所有内容,主线程暂停并等待窗口关闭。对我来说,这看起来像是一种(不是非常具有毁灭性的)资源浪费,所以我只想用AWT的主线。有没有一个很好的理由,为什么没有这样做,如果没有,是否有办法做到这一点?使用现有的Java线程AWT

+0

为什么选择AWT而不是Swing?看到我对[Swing extras over AWT]的回答(http://stackoverflow.com/a/6255978/418556)有很多很好的理由放弃使用AWT组件。如果您需要支持较老的基于AWT的API,请参阅[混合重量级和轻量级组件](http://www.oracle.com/technetwork/articles/java/mixing-components-433992.html)。 –

+0

AWT因为我只是打开一个框架为JOGL,并没有任何GUI。 GUI是在OpenGL中手动绘制的 – th3falc0n

+0

谢谢澄清。这是有道理的.. –

回答

3

只要让主线程退出,就没有必要保持它暂停和等待。

线程可以被标记为守护进程或没有。应用程序只在每个非守护线程退出时退出,在Java中,主线程除了首先启动的事实之外没有任何特别的意义。

EDT线程不是一个守护程序线程,所以它会使应用程序保持自己的活动状态。

What is Daemon thread in Java?

+0

好吧,我觉得这会关闭整个应用程序。 – th3falc0n

+0

查看扩展的答案。 –

0

一个暂停的线程(如果它甚至实际上已暂停)是不是一个真正的大问题。我建议你看看你的程序,比如JProfiler,你会对后台发生的事情感到震惊。

2

基于这个文档http://docs.oracle.com/javase/6/docs/api/java/lang/Thread.html

当Java虚拟机启动时,通常有一个单一的非守护线程(它通常会调用名为main一些指定类的方法)。 Java虚拟机继续执行线程,直到发生以下任一情况:

Runtime类的退出方法已被调用,并且安全管理器已允许执行退出操作。 所有不是守护进程线程的线程都已死亡,无论是从调用返回的run方法还是通过抛出传播超出run方法的异常。

这个故事的寓意:

A Java program will wait for all non-daemon threads to finish first. 

在你的情况,你可能想退出主线程。

相关问题