Java 是否应该由EDT(事件调度线程)执行代码?
我开发了一个Swing GUI,其中包含12个Java 是否应该由EDT(事件调度线程)执行代码?,java,user-interface,swing,refactoring,Java,User Interface,Swing,Refactoring,我开发了一个Swing GUI,其中包含12个JPanels。最初,所有的JPanels代码都写在主JFrame类代码中。结果,代码变得太长(10000多行) 现在我想重构代码,将代码分成13个类(一个JPanel各12个类,主JFrame各1个类),而不是一个包含所有代码的类 但我有一些困惑,如下所示: 最初,这12张JPanels被设置在一张“卡片”JPanel上,“卡片”JPanel的布局被设置为CardLayout,因此,根据点击的按钮,这12张JPanel中只有1张。现在,当我将这12
JPanel
s。最初,所有的JPanel
s代码都写在主JFrame
类代码中。结果,代码变得太长(10000多行)
现在我想重构代码,将代码分成13个类(一个JPanel
各12个类,主JFrame
各1个类),而不是一个包含所有代码的类
但我有一些困惑,如下所示:
JPanel
s被设置在一张“卡片”JPanel
上,“卡片”JPanel
的布局被设置为CardLayout
,因此,根据点击的按钮,这12张JPanel
中只有1张。现在,当我将这12个JPanel
s从MainJForm
中分离出来,并将它们实现到自己的类中时,我认为每当用户单击按钮时,我需要首先实例化相应的JPanel
。因此,在EDT(事件Dispath线程)上执行这项繁重的任务是否更好。如果否,那么在SwingWorker
线程中创建一个JPanel实例并将引用传递给EDT是否有效
您可以完全按照在一个类中安装面板时的方式来安装面板。因此,如果前面的实现在框架实例化时创建了所有对象,那么您可以同样实例化12个面板对象。如果在单击按钮时面板显示时已完成此操作,请以相同的方式执行 在这种情况下,代码所在的问题在执行时应该不会对问题产生影响,至少在之前没有问题的情况下是如此(当点击按钮切换面板时,ui会挂起)
当然,您可以先创建最初显示的面板,然后使用swingworker创建其他面板,以便第一个面板立即显示,其他面板在单击按钮后立即可用,而无需先实例化它们。只需确保在EDT中小心地调用更改当前显示的ui(如向框架中添加实例化面板)的调用。在EDT中构建
JPanel
的12个实例不应引起关注。我会继续这样做。这将使您的代码更易于阅读。警惕过早的优化。只有在遇到性能问题时,我才会优化性能。当前推荐的做法是,对swing组件的所有调用都在EDT上完成。见和
如果(作为其初始化的一部分)这些面板中的任何一个需要一些可能需要很长时间的东西(如光盘或网络访问),那么这些调用应该委派给另一个线程,而不是对swing组件本身的任何更改。您可以查看任何SwingSet演示,例如或