我读过几本关于 Java 的书。在所有这些中,至少有一章教授 GUI 编程。在所有这些中,创建一个简单的表单应用程序都遵循以下逻辑:
MyFrame.java
public class MyFrame extends JFrame
{
JButton button1;
public MyFrame()
{
button1 = new JButton("Click here.");
}
}
FrameTest.java:
public class FrameTest
{
public static void main(String[] args)
{
MyFrame myFrame = new MyFrame();
myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
myFrame.setSize(600, 600);
myFrame.setVisible(true);
}
}
基本上,只需将 JFrame 子类化以创建表单并将其他组件声明为实例变量并在构造函数中初始化这些组件。然后创建另一个测试类,在该类中实例化框架子类并调用它的一些方法使其可见。
但是在并发课程中,我了解到我们有一个主线程,它在我们创建的每个应用程序中运行 main()。据我所知,当我们使用 Swing 来创建 GUI 应用程序时,我们有另一个线程(Event Dispatcher Thread)。所以如果我没记错的话,在每个基于 Swing 的 GUI 应用程序中至少有两个线程。这使得每个 GUI 应用程序都是多线程的。在我读过的一些文章和教程中,它说 Swing 不支持多线程,因此所有 GUI 组件都应该只在 Event Dispatcher Thread 中创建和修改,否则可能会出现线程干扰和内存不一致错误。
即使在 Wikipedia ( http://en.wikipedia.org/wiki/Swing_%28Java%29 ) 中最简单的示例中,它也是通过 invokeLater 方法实现的。
那么哪一种才是真正的方法呢?我哪里错了?