2017-02-07 2 views
2

Я использую IntelliJ IDEA и написал очень базовую программу JavaFX (или просто начал писать программу). Когда я запускаю программу для проверки моего графического интерфейса, нажмите кнопку X, чтобы закрыть окно java. Я получаю следующее. Если я код кнопки сказать Platform.exit(), она также дает мне этот код:Базовое закрытие приложения Java с неправильным кодом выхода

процесс завершится с кодом выхода -1073741819 (0xC0000005)

Я кодированной кнопку для вызова System.exit (0), и когда я нажимаю на него, он печатает на консоли, что нажата кнопка выхода, и говорит:

Java SE Binary перестает работать.

Я запустил новый проект JavaFX в Intellij IDEA и пропустил прогон, чтобы проверить начатое исходное тестовое окно, а также выходит с кодом выхода, указанным выше.

У меня установлена ​​последняя JDK (jdk1.8.0_121 64 бит), последняя версия сценария от GluonHQ, и я запускаю Windows 10 Pro x64.

Не уверен, что еще нужно предоставить информацию мудрый, пожалуйста, дайте мне знать, если вам нужна дополнительная информация.

Код кнопки выхода (fxid совпадает с файлом контроллера/.xml). Я планирую сделать лямбду в будущем, все еще обнимая вокруг себя, но это должно работать так, как есть, нет?

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

EDIT: Это код, который сам по себе является лишь пример проекта создает 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); 
    } 
} 
+0

Не могли бы вы разместить более релевантный код? Мне интересно, нужно ли закрывать какой-то объект потока - что-то в этом роде. –

+0

Что вы хотите достичь, вызывая 'Platform.exit();'. Есть ли какая-либо пользовательская реализация в методе остановки 'Application'? Если вы хотите полностью отключить JVM, вызовите 'System.exit (0); вместо – AntJavaDev

+1

@AdrianM. Я поставил больше кода в своем оригинальном посте. Я попробовал ... Platform.exit(); System.exit (0); Добавление System.exit (0) вызывает сбой двоичного файла SE. –

ответ

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

+0

К сожалению, это не работает. Как показано в моем исходном сообщении, если я это сделаю, я получаю двоичный сбой Java SE. Я закодировал кнопку для вызова System.exit (0), и когда я нажимаю на нее, она печатает на консоли, что нажата кнопка выхода, и говорит: Java SE Binary перестает работать. –

2

Согласно varioussources, кажется, что это была проблема с диапазоном драйверов NVidia. Я получал код возврата 0xC0000005, обновил свои драйверы до 378.66 (выпущен 13.02.2012, текущий по состоянию на 21.02.2012) и прекратил эту проблему.