Very quick because I haven't got time to write a proper answer with sample code:
- In the main for your long running Java application, call the JavaFX application launch method once (and only once for the entire lifetime of your application).
- Call Platform.setImplicitExit(false).
- In the start method of your JavaFX application don't show a window.
- Provide a static accessor on your JavaFX application show(data) which passes your blob data.
- The show(data) method displays a JavaFX window for relaying data processing info in a UI.
- When necessary call a static hide() method on your application which hides the JavaFX application window.
- Continue processing, performing steps 5 and 6 (showing and hiding the window as needed).
- When everything is finished call Platform.exit().
Key thing is that the JavaFX application is only launched once and you invoke a static accessor on it as needed to show the window. The set implicit exit false stuff prevents the default behavior of the JavaFX runtime shutting down when the last window of the application is hidden (so it just chugs along in the background waiting for a signal to show something again).
You could simplify things a little bit by having the your data processing application just extend the JavaFX Application class, but you might want to keep them separate for ease of testing or other design reasons.
Your other option is to use JFXPanel, but that adds an unnecessary Swing dependency, so I'd advise against that.