Java 需要的设计方案:从JFrame外部启用菜单项

Java 需要的设计方案:从JFrame外部启用菜单项,java,multithreading,swing,file-io,jmenuitem,Java,Multithreading,Swing,File Io,Jmenuitem,我的Java应用程序主要存在于JFrame对象中。其“文件”菜单有两个条目“打开”和“打开” “关闭”。“关闭”菜单项被禁用。一旦启动,fileOpenActionPerformed将启用它 已完成对文件的分析: private void fileOpenActionPerformed(java.awt.event.ActionEvent evt) { // (1) get file from JFileChooser // (2) parse Contents if(bCon

我的Java应用程序主要存在于JFrame对象中。其“文件”菜单有两个条目“打开”和“打开” “关闭”。“关闭”菜单项被禁用。一旦启动,fileOpenActionPerformed将启用它 已完成对文件的分析:

private void fileOpenActionPerformed(java.awt.event.ActionEvent evt) {
   // (1) get file from JFileChooser
   // (2) parse Contents
   if(bContentsValid == true) {
      this.fileClose.setEnabled(true);
   }
由于解析需要相当长的时间,我想在一个单独的线程中进行分析。线程应该启用 一旦完成,“关闭”菜单项

在我看来,向线程传递一个JMenuItem引用似乎是一个相当糟糕的设计。有什么设计建议吗

注意:我曾想过使用一个包含JFrame和thread引用的包装对象,但是
中断NetBeans IDE生成的大部分代码…

将完成时操作封装在
Runnable
中,并将该
Runnable
传递给后台线程

这将非常方便,因为为了正确实现,您的后台线程必须通过或计划UI操作,您无论如何都需要一个
Runnable



或者,您也可以使用。然后,您可以覆盖
done()
方法,并在其中包含菜单项enabling。

是的,第二种方法会带来更好的设计解决方案。它从相反的方向解决了这个问题:让GUI拥有SwingWorker,而不是让线程改变GUI-->的功能。。。