我使用最新的Eclipse和GWT Designer来用Java创建swing应用程序.我的应用程序窗口中的主要功能(这是一个javax.swing.JFrame)在工具生成的auto中如下所示:
/* launch the application */
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
AppWindow window = new AppWindow();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
Run Code Online (Sandbox Code Playgroud)
这似乎是围绕着这可能是一个很大的噪音:
public static void main(String[] args) {
try {
AppWindow window = new AppWindow();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
我已经读过在某些情况下需要EventQueue.InvokeLater技术,另一个问题是在这里询问使用它的位置.
我的问题更简单; 为什么在代码生成器中会自动执行此操作?为什么main应该快速返回并让事件队列稍后创建应用程序窗口?难道不会阻止这一点吗?为什么JFrame自动生成的设计器会执行此EventQueue?我试图在启动和显示表单方面看到一些不同,无论这个代码是以更简单的方式还是更难的方式完成,我只能暂时断定这有一些好处,这些好处在初学者制作的小型演示应用程序中不可见像我一样,也许在现实世界的大型复杂Jframe类中,这种延迟/排队策略有一些好处吗?
根据您的应用程序及其使用方式,可能会EventQueue在调用main方法之前或期间在屏幕上绘制(因此使用).应该修改任何UI组件的调用,Event Dispatch Thread这包括设置应用程序可见.
所以为了安全起见,开始使用应用程序是一个很好的做法EDT.
为什么在代码生成器中会自动执行此操作?
它不会伤害,它很容易产生,并且它被认为是良好的做法.
为什么main应该快速返回并让事件队列稍后创建应用程序窗口?
该main方法可能是从其他正在使用的应用程序调用的,EDT并且可能已在屏幕上绘制了某些内容.如果直接绘制应用程序main,则可能是您的应用程序可能正在更改某些正在处理的组件EDT,并且可能已在屏幕上绘制.
所以为了安全以防万一这种情况发生,你应该把它留给EDT绘制你的应用程序,这样它就可以在不干扰任何其他事情的情况下完成它.
难道不会阻止这一点吗?
除非main通过双击桌面图标启动用户启动的JVM进程以外的其他操作,否则main只要屏幕上有内容,返回时就不会产生任何影响.
我只能暂时断定这有一些好处,这些好处在像我这样的初学者制作的小型演示应用中是看不到的
你是对的 - 大部分时间它可能不会有所作为,但我认为它们包括它因为它易于生成和实现,它不会受到伤害,并且它将是良好实践的例证.