关闭退出代码错误的基本Java应用程序

时间:2017-02-07 18:11:27

标签: java intellij-idea javafx

我使用IntelliJ IDEA并编写了一个非常基本的JavaFX程序(或者刚刚开始编写该程序)。当我运行程序来检查我的GUI,然后点击X按钮关闭java窗口我得到以下内容。如果我编写一个按钮来说明Platform.exit(),它也会给我这个代码:

  

处理完成,退出代码为-1073741819(0xC0000005)

我编写了一个按钮来调用System.exit(0),当我点击它时,它会打印到控制台,单击退出按钮然后说:

  

Java SE二进制文件已停止工作。

我在Intellij IDEA中启动了一个新的JavaFX项目并点击运行以检查它运行的基本样本窗口,并且还退出上面列出的退出代码。

我安装了最新的JDK(jdk1.8.0_121 64位),来自GluonHQ的最新版本的scenebuilder,并且运行的是Windows 10 Pro x64。

不确定还提供哪些信息,如果您需要更多信息,请与我们联系。

退出按钮的代码(fxid在controller / .xml文件中是相同的)。我计划将来做一个lambda,仍然围绕着那些,但这应该按原样运行,不是吗?

exitButton.setOnAction(new EventHandler<ActionEvent>()
    {
        @Override
        public void handle(ActionEvent event)
        {
            System.out.println("You clicked exit!");
            Platform.exit();
        }
    });

编辑:这是代码,它本身就是IntelliJ IDEA在启动新的JavaFX项目时创建的示例项目。没有任何调整我仍然得到退出代码而不是预期的0,所以发生的事情独立于我写的代码。

在sample.fxml

<?import javafx.geometry.Insets?>
<?import javafx.scene.layout.GridPane?>

<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<GridPane fx:controller="sample.Controller"
          xmlns:fx="http://javafx.com/fxml" alignment="center" hgap="10" vgap="10">
</GridPane>

在Controller.java上

package sample;

public class Controller {
}
Main.java上的

package sample;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception{
        Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
        primaryStage.setTitle("Hello World");
        primaryStage.setScene(new Scene(root, 300, 275));
        primaryStage.show();
    }


    public static void main(String[] args) {
        launch(args);
    }
}

2 个答案:

答案 0 :(得分:2)

根据various sources,似乎这是一系列NVidia驱动程序的问题。我收到了返回代码0xC0000005,将我的驱动程序更新为378。66(2017年2月21日发布,截至2017年2月21日发布)并停止了此问题。

答案 1 :(得分:0)

在终止整个程序之前尝试正确关闭GUI窗口:

exitButton.setOnAction(new EventHandler<ActionEvent>()
{
    @Override
    public void handle(ActionEvent event)
    {
        event.getSource().getScene().getWindow().close();
        System.out.println("You clicked exit!");
        System.exit(0);
    }
});

如此处所示:https://stackoverflow.com/a/41838183/4084636