2016-02-25 7 views
0

Я работаю над приложением JavaFX, и я хочу знать, есть ли способ обрабатывать исключения в одном месте.JavaFX - Обработка исключений в одном месте

Я делаю вставки в базу данных. И когда вставка выходит из строя, я получаю SQLException.

Итак, можно ли обрабатывать все SQLExceptions (для всех вставок) в одном месте?

Я знаю:

Thread.setDefaultUncaughtExceptionHandler(...); 

Но это, вероятно, не так, как идти?

ответ

1

Неправильно использовать любой код, который выполняет ваш SQL-запрос (или любую другую бизнес-логику, которая может занять много времени) непосредственно в приложении JavaFX Thread. (Я заметил, что при загрузке приложений Windows JavaFX, даже не распечатывая stacktrace, когда в потоке приложения выбрано неперехваченное исключение).

Я бы предложил позвонить по вашему SQL-коду, используя javafx.concurrent.Task. Используя метод setOnFailed(), вы можете получить код, вызываемый всякий раз, когда вызывается Execption. Там вы можете искать тип исключения и вызывать любой метод, который обрабатывает ваш SQLException.

Task<SOME_TYPE> mySqlTask = new Task<>() { 
     @Override 
     protected SOME_TYPE call() throws Exception { 
      ... // do sql stuff 
      return mySqlResult; // or null if not needed 
     } 
    }; 

    mySqlTask.setOnFailed(event -> { 
     Throwable exception = mySqlTask.getException(); 
     if (exception instanceof SQLException) { 
      // call code that handles the sql exception 
     } 
    }); 

    // start the task in a separate thread (or better use an Executor) 
    new Thread(mySqlTask).start(); 

Кстати, я не думаю, что использование Thread.setDefaultUncaughtExceptionHandler(...); путь не идти ни.

+0

Спасибо, я буду использовать это. – Virtap

Смежные вопросы