Java 关闭JFrame后在main()中执行操作

Java 关闭JFrame后在main()中执行操作,java,swing,execution,windowlistener,Java,Swing,Execution,Windowlistener,我很抱歉,因为我相信这个问题已经被问过了,但是没有一个答案真正帮助了我。 我有一个带有gui的类,它包含一个带有几个文本字段和按钮的JFrame。以下是我正在努力工作的主要内容: Gui interface1 = new Gui(); interface1.setSize(200,200); interface1.setVisible(true); //hold main execution //wait for the pressed button in gui //close the jfr

我很抱歉,因为我相信这个问题已经被问过了,但是没有一个答案真正帮助了我。 我有一个带有gui的类,它包含一个带有几个文本字段和按钮的JFrame。以下是我正在努力工作的主要内容:

Gui interface1 = new Gui();
interface1.setSize(200,200);
interface1.setVisible(true);
//hold main execution
//wait for the pressed button in gui
//close the jframe
//proceed with main()
call_some_functions();
我曾尝试将默认关闭操作设置为在关闭时隐藏,但这似乎不是我想要的。我正在使用一个框架,我需要main()在相当长的时间内保持活动状态。 基本上,我需要jframe在用户输入和更新参数时保持main(),然后在不终止进程的情况下关闭自己,继续main(),就像什么都没有发生一样。
提前感谢您的帮助。

使用
JDialog
而不是
JFrame
,并使用
JDialog\setModal
JDialog
设置为
true


有关更多信息,请参见使用
JDialog
而不是
JFrame
,并使用
JDialog\setModal
JDialog
设置为
true

有关更多信息,请参见使用:

frame.setDefaultCloseOperation(frame.HIDE_ON_CLOSE);
例如:

根据您的需要进行更新:

import javax.swing.JFrame;
import javax.swing.JTextField;



public class TestFrame {
public static void main(String aa[])
{
JFrame frame =new JFrame();
JTextField field=new JTextField("hello buddy..nuthin happnd");
 frame.setDefaultCloseOperation(frame.HIDE_ON_CLOSE);
frame.add(field);
frame.pack();
frame.setVisible(true);


 frame. addComponentListener(new java.awt.event.ComponentAdapter() {
        public void componentHidden(java.awt.event.ComponentEvent evt) {
            formComponentHidden(evt);
        }
    });
 }

 private static void formComponentHidden(java.awt.event.ComponentEvent evt) {
   somefunction();
  }
 public static void somefunction()
 {
  System.out.println("hii!! i am hidden!!");

  }
 }
使用:

例如:

根据您的需要进行更新:

import javax.swing.JFrame;
import javax.swing.JTextField;



public class TestFrame {
public static void main(String aa[])
{
JFrame frame =new JFrame();
JTextField field=new JTextField("hello buddy..nuthin happnd");
 frame.setDefaultCloseOperation(frame.HIDE_ON_CLOSE);
frame.add(field);
frame.pack();
frame.setVisible(true);


 frame. addComponentListener(new java.awt.event.ComponentAdapter() {
        public void componentHidden(java.awt.event.ComponentEvent evt) {
            formComponentHidden(evt);
        }
    });
 }

 private static void formComponentHidden(java.awt.event.ComponentEvent evt) {
   somefunction();
  }
 public static void somefunction()
 {
  System.out.println("hii!! i am hidden!!");

  }
 }


退出Jframe会调用System.exit(0),这不是我想要的。问题是,我如何在关闭JFrame后调用函数(),因为现在调用函数()在JFrame弹出后立即执行。将鼠标移动到windowListener标记,单击常见问题解答,您的问题是正确的,事件描述不清楚我无法将main()中的所有内容都堆叠到某个windowClosed(e)函数中,我需要main继续执行executingExit Jframe调用System.exit(0),这不是我想要的。问题是,我如何在关闭JFrame后调用函数(),因为现在调用函数()在JFrame弹出后立即执行。将鼠标移动到windowListener标记,单击常见问题解答,您的问题是正确的,事件描述不清楚我无法将main()中的所有内容都堆叠到某个windowClosed(e)函数中,我需要main继续执行。Gop说:“我已经尝试将默认关闭操作设置为在关闭时隐藏,但这似乎不是我想要的。”。我需要关闭JFrame,然后继续进行main。@user1974708,这不是很清楚。您想在窗口关闭后立即转到main吗?这就是您想要的吗?OP说“我已尝试设置默认关闭操作以在关闭时隐藏,但这似乎不是我想要的。”在这种情况下,调用一些函数()在关闭JFrame之前执行。我需要关闭JFrame,然后继续进行main。@user1974708好吧,这不是很清楚。你想在窗口关闭后立即转到main吗?这就是你想要的吗?我不敢相信它这么简单。接口1.setModal(true)是答案。谢谢。+1非常简单,可能最好还是使用JDialog,因为它似乎不是一个完整的UI。您是如何知道用户想要什么的?因为语言不是英语。我阅读了他的代码并推断出其含义-//保持主执行-在Swing中实现这一点的唯一方法是使用JDialog;)@david根据不同的需求,JOptionPane可能是更好的选择我不敢相信它会这么简单。接口1.setModal(true)是答案。谢谢。+1非常简单,可能最好还是使用JDialog,因为它似乎不是一个完整的UI。您是如何知道用户想要什么的?因为语言不是英语。我阅读了他的代码并推断出其含义-//保持主执行-在Swing中实现这一点的唯一方法是使用JDialog;)@david根据需要,JOptionPane可能是更好的选择