【问题标题】:Basic Java App closing with bad exit code基本 Java 应用程序以错误的退出代码关闭
【发布时间】:2017-02-07 18:11:26
【问题描述】:

我正在使用 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 在控制器/.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);
    }
}

【问题讨论】:

  • 你能发布更多相关的代码吗?我想知道是否可能需要关闭某些流对象 - 类似的事情。
  • 你想实现什么,请致电Platform.exit();。您的Application 的停止方法中是否有任何自定义实现?如果要完全关闭 JVM,请改为调用System.exit(0);
  • @AdrianM。我在原始帖子中添加了更多代码。我确实尝试过... Platform.exit(); System.exit(0);添加 System.exit(0) 会导致 SE 二进制文件崩溃。
  • @AntJavaDev 见上面的评论,还在原帖中添加了更多代码,谢谢你的帮助

标签: java intellij-idea javafx


【解决方案1】:

根据varioussources,这似乎是一系列 NVidia 驱动程序的问题。我收到了返回码 0xC0000005,将我的驱动程序更新为 378.66(于 2017 年 2 月 13 日发布,截至 2017 年 2 月 21 日)并不再出现此问题。

【讨论】:

    【解决方案2】:

    在终止整个程序之前尝试正确关闭 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

    【讨论】:

    • 不幸的是,这不起作用。如我原来的帖子所示,如果我这样做,我会遇到 Java SE Binary 崩溃。我编写了一个按钮来调用 System.exit(0),当我单击它时,它会在控制台打印出单击了退出按钮然后说:Java SE 二进制文件已停止工作。
    猜你喜欢
    • 2021-03-11
    • 2020-11-17
    • 2017-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-08
    • 1970-01-01
    相关资源
    最近更新 更多