在JavaFX中调用swing软件的主要功能将终止JavaFX软件

时间:2016-12-04 18:34:54

标签: java swing javafx javafx-8

当我尝试在JavaFX程序中调用swing程序的main function时,swing程序正常运行。但是当我试图关闭swing程序时,JavaFx程序也会终止。什么原因?我该如何解决?

这是JavaFX程序代码:

private void initStartGameButton() {
    startButton.setOnMouseClicked(new EventHandler<MouseEvent>() {
        @Override
        public void handle(MouseEvent event) {
            if(!isPosValid()){
                return;
            }
            String[] args = {"" + axePositionX, "" + axePositionY, "" + boatPositionX, "" + boatPositionY};
            Game.main(args);
        }
    });
}

这是Swing程序代码:

// The entry point of the game.
// This class loads up a JFrame window and
// puts a GamePanel into it.

package com.neet.DiamondHunter.Main;

import javax.swing.JFrame;

public class Game {
    public static String[] args;

    public static void main(String[] args) {
        //save the args list.
        Game.args = args;

        JFrame window = new JFrame("Diamond Hunter");

        window.add(new GamePanel());

        window.setResizable(false);
        window.pack();

        window.setLocationRelativeTo(null);
        window.setVisible(true);
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

1 个答案:

答案 0 :(得分:1)

此:

window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

窗口关闭时会导致JVM退出。根据{{​​3}}:

  

EXIT_ON_CLOSE(在JFrame中定义):使用System exit方法退出应用程序。仅在应用程序中使用它。

而是将默认关闭操作设置为其他内容,可能是

window.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

根据API:

  

DISPOSE_ON_CLOSE(在WindowConstants中定义):在调用任何已注册的WindowListener对象后自动隐藏和处理框架。

这将有助于清理和释放Swing使用的一些资源。