Another JavaFX Application Thread

Jens Kapitza j.kapitza at schwarze-allianz.de
Thu Aug 6 10:41:25 UTC 2015


Am Donnerstag, 6. August 2015, 12:25:19 schrieb Rahman USTA:
> Hello all;
> 
> I'm developing AsciidocFX <https://github.com/asciidocfx/AsciidocFX> .
> Everything is good with JavaFX but I have some trouble of it's threading
> model.
> 
> My case is;
> 
> AsciidocFX converts AsciiDoc documents to another formats (html, docbook,
> etc.) with asciidoctor.js using a WebView component . When we are using big
> AsciiDoc files (for example a book), generating docbook or something takes
> some seconds. While converting AsciiDoc documents, UI is being unresponsive
> until conversion completed because Asciidoctor.js must be run on JavaFX
> Application Thread and conversion takes long time. I think there must be a
> hack or something to handle that scenario.
> 
> I thought to use HTML 5 Web Worker in WebView, but it will brings me more
> complexity in JavaScript side. I need a solution in Java FX side.
> 
> Thanks.

Can you tell me the classes (method) which you call and the freeze occure?

You should stop your ExecuterService, and avoid using System.exit


Take a look at javafx.concurrent.Task;

and do not calculate the result in FX Thread
example:
https://github.com/asciidocfx/AsciidocFX/blob/master/src/main/java/com/kodcu/boot/AppStarter.java


       StartupNotification.registerStartupListener(parameters -> {

            threadService.runActionLater(() -> {

                String[] files = parameters.split(" ");

                for (String file : files) {
                    file = file.replace("\"", "");
                    tabService.addTab(Paths.get(file).toAbsolutePath());
                }
            });
        });

if replace may be expensive


       StartupNotification.registerStartupListener(parameters -> {

                String[] files = parameters.split(" ");

                for (String file : files) {
			final Path myFile = 
			Paths.get( file.replace("\"", "")).toAbsolutePath();
            threadService.runActionLater(() -> { 
                    tabService.addTab(myFile);           // <<< only do this 
in FX thread
            });
		}
        });

this would be better to avoid freeze.



replace is just for illustrate the problem.







--
Jens Kapitza
p.s. sorry for my bad english


More information about the openjfx-dev mailing list