需要设计提案:从JFrame外部启用菜单项

时间:2014-08-14 16:32:59

标签: 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(bContentsValid == true) {
      this.fileClose.setEnabled(true);
   }

由于解析需要很长时间,我想在一个单独的线程中考虑它。线程应该启用 完成后“关闭”菜单项。

传递一个JMenuItem引用的线程对我来说看起来很糟糕。任何设计建议?

注意:我想过使用一个包装对象同时包含JFrame和线程引用但是这样     打破了NetBeans IDE生成的大部分代码......

1 个答案:

答案 0 :(得分:2)

Runnable中封装完成后操作,并将Runnable传递给您的后台主题。

这会很方便,因为对于正确的实现,您的后台线程必须通过EventQueue.invokeLaterSwingUtilities.invokeLater安排UI操作,无论如何都需要Runnable


或者,您可以使用SwingWorker实现整个后台活动。然后,您可以覆盖done()方法并在其中包含启用的菜单项。