Java 隐藏JFrame并在后台运行其他类?

Java 隐藏JFrame并在后台运行其他类?,java,swing,jframe,Java,Swing,Jframe,是否可以隐藏我的JFrame窗口,并在这样的操作中从另一个类启动主方法 以下是行动守则: private AbstractAction start=new AbstractAction(“start”){ @凌驾 已执行的公共无效操作(操作事件arg0){ } }; JFrame有一个setVisible方法,可以根据需要隐藏窗口 您可以静态地调用另一个类中的main方法,尽管这有点混乱。最好让main方法和Action调用另一个方法来执行所需的任务 因为您正在将JFrame设置为在动作中可见,

是否可以隐藏我的
JFrame
窗口,并在这样的操作中从另一个类启动主方法

以下是行动守则:

private AbstractAction start=new AbstractAction(“start”){
@凌驾
已执行的公共无效操作(操作事件arg0){
}
};

JFrame有一个setVisible方法,可以根据需要隐藏窗口

您可以静态地调用另一个类中的main方法,尽管这有点混乱。最好让main方法和Action调用另一个方法来执行所需的任务


因为您正在将JFrame设置为在动作中可见,并且您的其他方法可能需要一些时间,所以您可能需要使用SwingWorker线程,否则您的接口将挂起(使用绘制帧的同一线程调用动作),并且在动作方法存在之前,它不会不可见。请看这里:

我一直在做一些与您试图实现的目标几乎相似的事情。 我有一个GUI,用户在其中输入值,然后单击开始按钮运行程序(使用这些值作为输入)。当程序启动时,我可以选择:

  • 隐藏GUI并启动程序或
  • 隐藏输入字段并显示日志文本框,显示程序运行时的程序状态
在这两种情况下,当我想要启动程序时,我会创建一个新的java线程

以下是对我有用的资源:

  • 创建文件选择器GUI的代码:
  • 创建输入对话框的代码
  • 用于创建在新线程中启动程序的操作侦听器的代码:

    //Handle LAUNCH action.
    else if (e.getSource() == launchButton) 
    {
        JFrame launchConfirmationFrame = new JFrame("Launch Confirmation");
        launchConfirmationFrame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
        int answer;
    
        launchConfirmationFrame.pack();
        //downloadDateframe.setVisible(true);
    
            //if answer=0 its yes, if its =1 its no!
            answer = JOptionPane.showConfirmDialog(
                    launchConfirmationFrame
                    ,"^^^^ ARE YOU SURE YOU WOULD LIKE TO PROCEED? ^^^^"
                    ,"TITLE"
                    ,JOptionPane.YES_NO_OPTION);
    
            if(answer==0)
            {
                buttonPanel.removeAll();
                optionsFrame.repaint();
                optionsFrame.setVisible(true); // THIS HIDES THE GUI FRAME if it is set to false. 
    
                System.out.println("Launching YOURPROGRAM...");
    
                //THIS CREATES AND STARTS THE THREAD WITH YOUR PROGRAM TO BE LAUNCHED
                    //More info on threads here http://docs.oracle.com/javase/tutorial/essential/concurrency/runthread.html
                Thread t = new Thread(new Runnable() {
                    public void run() {
                        //Turn off metal's use of bold fonts
                        UIManager.put("swing.boldMetal", Boolean.FALSE); 
                        launchYOURPROGRAM();
                    }
                });
    
                t.start();
            }
    
            else if (answer==1)
            {
                optionsFrame.setVisible(false);
                optionsFrame.setVisible(true);
                System.out.println("Returning to GUI Frame...");
            }
        }'
    
记住将Jframe(这里我称之为optionFrame)设为静态,这样当您在程序中时,您就可以决定是再次显示还是隐藏它

通过您的程序,您可以调用:

private AbstractAction start = new AbstractAction("start") {

       @Override
       public void actionPerformed(ActionEvent arg0) 
       {
            optionsFrame.setVisible(false);

       }
};

我认为您没有正确使用操作…请正确设置代码格式。选择你想要格式化的代码,然后点击“{}”按钮。嘿,我只是想说谢谢你真的帮了我很多:D如果可以,我会还给你一些东西(如果你对3D建模感兴趣,我可以给你一些提示;)