Java Swing JPopMenu setVisible(false)不';行不通

Java Swing JPopMenu setVisible(false)不';行不通,java,swing,jpopupmenu,Java,Swing,Jpopupmenu,我有一个类MyPopupMenu,它扩展了JPopupMenu。在这个弹出菜单中,我添加了一个带有ActionListener的JMenuItem,它调用一个需要几分钟才能返回的进程。我想在按下此项后立即关闭弹出菜单。MyPopupMenu类中的方法如下: private JMenuItem newItem(){ JMenuItem item=new JMenuItem(); item.setText("One"); item.setToolTipText("One");

我有一个类MyPopupMenu,它扩展了JPopupMenu。在这个弹出菜单中,我添加了一个带有ActionListener的JMenuItem,它调用一个需要几分钟才能返回的进程。我想在按下此项后立即关闭弹出菜单。MyPopupMenu类中的方法如下:

private JMenuItem newItem(){
    JMenuItem item=new JMenuItem();
    item.setText("One");
    item.setToolTipText("One");
    ActionListener mylistener = new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent event) {
            MyPopupMenu.this.setVisible(false);
            Class1 class1=new Class1(file);
            try {
                class1.start();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    };
    item.addActionListener(mylistener);
    return item;
}

这不管用。在我按下“一”项后,进程开始,但弹出菜单保持打开状态,直到进程返回(几分钟)。是否可以使弹出菜单消失,但进程继续运行?

您正在Swing主线程上执行操作。这会阻止Gui的更新。您应该将类的开头移动到另一个线程中


有关更多信息,请参见运行操作侦听器的线程处理GUI更新。您应该在后台线程中运行长时间运行的任务,例如使用。谢谢!我使用了SwingWorker,它的工作原理与预期一致!