У меня есть программа, которая не в потоке приложений JavaFX, и я хочу вызвать в нее какое-то приложение JavaFX, чтобы что-то сделать для меня. Вот мой код:Как закончить потоки JavaFX и завершить их при вызове Platform.runLater()?
public void extractImages(Document document) {
ImageExtractor_HTML_Data.getInstance().documentId = document.getId();
if (!ImageExtractor_HTML_Data.getInstance().started)
new JFXPanel();
ImageExtractor_HTML_Data.getInstance().started = true;
Platform.runLater(new Runnable() {
ImageExtractor_HTML_Browser browser = new ImageExtractor_HTML_Browser();
@Override
public void run() {
browser.start(new Stage());
}
});
synchronized (ImageExtractor_HTML_Data.getInstance()) {
try {
ImageExtractor_HTML_Data.getInstance().wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
И мой класс Браузер:
public class ImageExtractor_HTML_Browser extends Application {
private Scene scene;
@Override
public void start(Stage stage) {
/* Some code */
stage.setTitle("Web View");
Browser browser = new Browser(htmlFile, stage);
scene = new Scene(browser, 750, 500, Color.web("#666970"));
stage.setScene(scene);
stage.show();
browser.imageExtractor(new ImageHandler_DB_HTML(document));
}
И мой метод imageExtractor является:
public void imageExtractor(final ImageHandler handler) {
webEngine.getLoadWorker().stateProperty()
.addListener(new ChangeListener<Worker.State>() {
@Override
public void changed(
@SuppressWarnings("rawtypes") ObservableValue observableValue,
Worker.State state, Worker.State newState) {
if (newState.equals(Worker.State.SUCCEEDED)) {
/* Some code which extract some data */
synchronized (ImageExtractor_HTML_Data
.getInstance()) {
ImageExtractor_HTML_Data.getInstance().notify();
}
stage.close();
Platform.exit();
return;
}
}
});
}
В методе imageExtractor я хочу, чтобы ждать, пока мой HTML файл загрузите полностью, а затем я хочу что-то сделать, поэтому я использую WebEngine.getLoadWorker.etc. Моя проблема в том, что после запуска этого кода мои потоки JavaFX не закончились, поэтому моя программа не закончилась. Хотя я не хочу использовать System.exit (0), потому что моя программа выполняется в середине проекта, который выполняется через tomcat, и если я использую System.exit (0), весь проект падает, что не очень хорошо все!
Может ли кто-нибудь мне помочь?