Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么java在处理时不退出应用程序?_Java_Swing_Awt - Fatal编程技术网

为什么java在处理时不退出应用程序?

为什么java在处理时不退出应用程序?,java,swing,awt,Java,Swing,Awt,我有以下问题:我希望java中的swing窗口能够以编程方式显示和关闭。但是,我不想退出应用程序,当框架关闭时,只要其他窗口仍然打开 据我所知,这是dispose()方法的意图。一旦所有窗口都被释放并且不再有线程运行,应用程序应该退出 但是我有一个问题,我的应用程序根本不退出。在进一步的调查中,我写了一篇MWE,得到了同样的行为。我几乎100%确信,很久以前,当我做类似的事情时,它的工作正如预期的那样 我需要自己编写窗口管理器吗?!?这似乎很愚蠢,因为java应该已经有了这样的功能。据我所知,这

我有以下问题:我希望java中的swing窗口能够以编程方式显示和关闭。但是,我不想退出应用程序,当框架关闭时,只要其他窗口仍然打开

据我所知,这是
dispose()
方法的意图。一旦所有窗口都被释放并且不再有线程运行,应用程序应该退出

但是我有一个问题,我的应用程序根本不退出。在进一步的调查中,我写了一篇MWE,得到了同样的行为。我几乎100%确信,很久以前,当我做类似的事情时,它的工作正如预期的那样

我需要自己编写窗口管理器吗?!?这似乎很愚蠢,因为java应该已经有了这样的功能。据我所知,这些文件应该是有效的。。。我自己还没有开始任何线程,我认为如果单击“X”或按钮,框架应该被丢弃

你能给我指出问题所在吗

package optimworkers.gui.config;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;

public class Test extends JFrame
{

    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            @Override
            public void run()
            {
                new Test();
            }
        });
    }

    public Test()
    {
        JButton but = new JButton("Test");
        add(but);
        but.addActionListener(new ActionListener()
        {

            @Override
            public void actionPerformed(ActionEvent e)
            {
                setVisible(false);
                dispose();
            }
        });

        pack();
        setVisible(true);

        setDefaultCloseOperation(DISPOSE_ON_CLOSE);
    }

}

编辑:

我使用UbuntuLinux(正确的说法是Ubuntu14.04LTS)。我尝试了OpenJDK1.7.0_101和1.8.0_91(都来自ubuntu存储库)


我打算在这个特殊项目中使用java,因为JVM允许编写可移植代码。因此,如果它不是JRE中的真正错误,我必须/应该确保应用程序关闭并发出
System.exit(0)呼叫。然而,有人认为这是一种不好的做法。到目前为止,我不惜一切代价试图避免这种情况。

为了处理当前的类(表单)并打开另一个类(表单),您可以使用以下代码。要退出应用程序,请使用
System.exit(0)


您是否尝试过
setDefaultCloseOperation(在关闭时退出)
据我所知,这是dispose()方法的意图
——这也是我的理解,在Window7上使用JDK 7对我来说效果很好。也就是说,我点击按钮,一秒钟后JVM关闭。我从命令行执行代码。可能是版本/平台问题。在问题中包括您的版本/平台,也许其他使用相同版本/平台的人将测试并报告结果。
       java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                dispose();
                new YOURCLASSTOBEOPENED().setVisible(true);
            } catch (ClassNotFoundException ex) {
                Logger.getLogger(YOURCURRENTCLASS.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    });