Хорошо. Для тех, кто заинтересован, вот то, что я сейчас использую для реализации своего запроса.
У меня есть метод, который возьмет Callable . Затем он создает FutureTask , который будет возвращен вызывающей стороне как Future . JXBusyLabel и JXLayer должны начать рисовать и заблокировать пользовательский интерфейс. FutureValue и Thread (см. Ниже) помещены в специальный список. Создается Runnable, который: вызывает run () для FutureTask, удаляет FutureValue (и поток) из списка, а если список пуст, разблокирует JXLayer и останавливает JXBusyLabel. Этот Runnable запускается в новом потоке с обычным приоритетом.
Когда пользователь нажимает кнопку отмены. Список повторяется, и задачи FutureTasks все отменяются и удаляются из списка, если они могут быть отменены. Сначала попробуйте отменить (false), затем отменить (true). Если оба эти средства не срабатывают, пользователю выдается предупреждение с вопросом, хотят ли они Thread.stop () выполнить задачу, и объясняется, что это может сделать приложение нестабильным. Если да, остановите () поток, выполняющий задачу. Это может привести к остановке приложения. Во всех случаях пользовательский интерфейс разблокирован.
В документации для других членов команды говорится, что они должны знать, что задание может быть убито. Они не должны вызывать get (), пока isDone () не станет истиной. Им явно говорят, что это в основном заставит их блокировать, пока задача не будет выполнена или отменена. Поэтому они не могут вызвать его из потока рассылки событий.
Другие решения все еще приветствуются