JavaFX - при вызове функций, которые долго выполняются, происходит ошибка “Платформа Java не работает ”

284
24 января 2017, 22:00

Здравствуйте, пишу приложение на java. В качестве GUI использую JavaFX (скажу сразу, что при использование swt данной проблемы нет).
Итак, есть некоторая функция, длительность выполнения которой не менее 30 сек на моем ноутбуке. В ней происходит довольно сложная обработка данных.
При её вызове буквально через 1-2 секунды появляется окошко, что "Платформа Java(TM) Platform SE binary не работает" с текстом "Возникшая проблема привела к прекращению работы программы...".
Как решить данную проблему я не знаю.
Может быть подскажет кто, как вызывать методы, которые выполняются довольно долго и при этом приложение на JavaFX не вырубало вот так..?
Вызываю метод при выборе элемента всплывающего меню:

itemGoIT.setOnAction(new EventHandler<ActionEvent>() {     
   @Override      
   public void handle(ActionEvent event) {      
      context.hide(); //убираем меню
      System.out.println("старт " + new Date(System.currentTimeMillis()));
      JniTest SS = new JniTest();
      try {
          //вызываем метод
          SS.showString();
       }
       catch (UnsatisfiedLinkError e) {
          System.out.println("метод не найден (" + e + ")");
       }
       System.out.println("завершено " + new Date(System.currentTimeMillis()));
    }    
});     
Answer 1

Скорее всего вы подвешиваете поток обрабатывающий события ui.
Чтобы этого не происходило, нужно вынести все тяжелые операции в отдельный поток, т.е. ваш код должен выглядеть следующим образом:

new Thread(() -> {
        System.out.println("старт " + new Date(System.currentTimeMillis()));
        JniTest SS = new JniTest();
        try {
            //вызываем метод
            SS.showString();
        } catch (UnsatisfiedLinkError e) {
            System.out.println("метод не найден (" + e + ")");
        }
        System.out.println("завершено " + new Date(System.currentTimeMillis()));
    }).start();
READ ALSO
Как оперировать шириной .navbar-brand в Bootstrap?

Как оперировать шириной .navbar-brand в Bootstrap?

Есть такой навбар, сайдбар и контент:

346
Не работает скрипт после добавления append()

Не работает скрипт после добавления append()

Помогите разобраться, может что то упускаю из виду

291
PHP: Не работает mail()

PHP: Не работает mail()

Добрый вечерЧто-то не работает функция mail(), хотя на хостинге есть возможность отправлять почту (тестил более примитивным)

303
Не работает onclick на button

Не работает onclick на button

Как это можно исправить? 'Начать играть'

420