Java 需要的设计方案:从JFrame外部启用菜单项
我的Java应用程序主要存在于JFrame对象中。其“文件”菜单有两个条目“打开”和“打开” “关闭”。“关闭”菜单项被禁用。一旦启动,fileOpenActionPerformed将启用它 已完成对文件的分析: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
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-->的功能。。。