Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在使用Java Swing时实现Runnable_Java_Swing_Runnable_Event Dispatch Thread - Fatal编程技术网

在使用Java Swing时实现Runnable

在使用Java Swing时实现Runnable,java,swing,runnable,event-dispatch-thread,Java,Swing,Runnable,Event Dispatch Thread,现在学习了一点Swing,发现了两个使用不同方法制作简单JFrame窗口的教程 第一个实现Runnable并在类中有一个JFrame对象变量: 类SwingDemo实现可运行{ 私有JFrame; @凌驾 公开募捐{ 框架=新框架(“标题”); …//setSize()、添加组件等 } } 公共班机{ 公共静态void main(字符串[]args){ invokeLater(新的SwingDemo()); } } 第二个教程没有实现Runnable,而是使用类构造函数初始化JFrame,并通

现在学习了一点Swing,发现了两个使用不同方法制作简单JFrame窗口的教程

第一个实现Runnable并在类中有一个JFrame对象变量:

类SwingDemo实现可运行{
私有JFrame;
@凌驾
公开募捐{
框架=新框架(“标题”);
…//setSize()、添加组件等
}
}
公共班机{
公共静态void main(字符串[]args){
invokeLater(新的SwingDemo());
}
}
第二个教程没有实现Runnable,而是使用类构造函数初始化JFrame,并通过匿名内部类调用构造函数

类SwingDemoAlt{
公共SwingDemoAlt(){
JFrame=新JFrame(“标题”);
…//这里还有一些代码
}
}
公共班机{
公共静态void main(字符串[]args){
SwingUtilities.invokeLater(新的Runnable(){
@凌驾
公开募捐{
新的SwingDemoAlt();
}
}
}
}
这两种方法有何不同?一种方法更可取吗

这两种方式有何不同

他们没有,不是真的,他们基本上以不同的方式实现了相同的目标

第一种是一种更“传统”的方法,而第二种是一种更“现代”或更为简捷的方法,它利用了在语言中引入欢迎语的优势

还有更受欢迎的选择吗

这是一个意见问题,就我的钱来说,第二个是首选的,因为它不会在类上放置一个不必要的
Runnable
,它还委托了在调用者上(正确地)设置UI的责任,并阻止代码做出假设(也就是说,您可以在任何时候简单地构造框架,然后运行它……只需在事件调度线程的上下文中执行即可)

另外,作为首选,您不应该直接从
JFrame
扩展,因为您实际上并没有向类添加新功能,相反,正如在第二个示例中所做的那样,只需在需要时创建一个实例并在其上构建UI


您可能还想了解更多关于为什么要使用
EventQueue.invokeLater
启动UI的详细信息

谢谢您的回答,只是想知道直接从
JFrame
扩展是什么意思?@shengbojia-Hmm