Enabling Glass thread checks
steve.x.northover at oracle.com
steve.x.northover at oracle.com
Fri Oct 4 12:38:25 PDT 2013
We are BAD. It should really be "FX Application Thread" but the "GUI",
"event" nature of the thread is critical to what it is. That's why the
terms keep getting added.
On 04/10/2013 3:36 PM, Richard Bair wrote:
> Ya, "event thread", "fx thread", "ui thread", "app thread", "FX Application thread" --- they're all the same thing. It would be better if we settled on one name.
> On Oct 4, 2013, at 12:00 PM, steve.x.northover at oracle.com wrote:
>> It's the JavaFX Application Thread. We tend to use the term "event thread" and "UI thread" to indicate that the thread is a distinguished UI thread that processes operating system events by running an event loop.
>> On 04/10/2013 2:45 PM, John Smith wrote:
>>>> IllegalStateException("This operation is permitted on the event thread only")
>>> What is the event thread?
>>> Current warnings about thread rule violations appear to be something like below (from: http://stackoverflow.com/questions/12182592/javafx-2-x-swing-not-on-fx-application-thread):
>>> Exception in thread "AWT-EventQueue-0" java.lang.IllegalStateException: Not on FX application thread; currentThread = AWT-EventQueue-0
>>> It is very confusing if warnings about what thread you should be on might use different names for what is perhaps the same thing.
>>> If I do System.out.println(Thread.currentThread().getName()); in a start() method, I get:
>>> JavaFX Application Thread
>>> The JavaFX Architecture overview (http://docs.oracle.com/javafx/2/architecture/jfxpub-architecture.htm#A1107438) only mentions these threads:
>>> JavaFX application thread: This is the primary thread used by JavaFX application developers. Any "live" scene, which is a scene that is part of a window, must be accessed from this thread. A scene graph can be created and manipulated in a background thread, but when its root node is attached to any live object in the scene, that scene graph must be accessed from the JavaFX application thread. This enables developers to create complex scene graphs on a background thread while keeping animations on 'live' scenes smooth and fast. The JavaFX application thread is a different thread from the Swing and AWT Event Dispatch Thread (EDT), so care must be taken when embedding JavaFX code into Swing applications.
>>> Prism render thread: This thread handles the rendering separately from the event dispatcher. It allows frame N to be rendered while frame N +1 is being processed. This ability to perform concurrent processing is a big advantage, especially on modern systems that have multiple processors. The Prism render thread may also have multiple rasterization threads that help off-load work that needs to be done in rendering.
>>> Media thread: This thread runs in the background and synchronizes the latest frames through the scene graph by using the JavaFX application thread.
>>> -----Original Message-----
>>> From: openjfx-dev-bounces at openjdk.java.net [mailto:openjfx-dev-bounces at openjdk.java.net] On Behalf Of Petr Pchelko
>>> Sent: Friday, October 04, 2013 1:40 AM
>>> To: OpenJFX list
>>> Subject: Enabling Glass thread checks
>>> Hello, OpenJFX.
>>> FX is a single threaded UI toolkit. Glass (the underlying native window toolkit portability layer for FX) is being changed to ensure it is accessed from the UI thread. You can follow progress in https://javafx-jira.kenai.com/browse/RT-26891
>>> We are reenabling the Glass thread checks ones again. Previous attempts failed, because we've been finding some threading issues, however now all the threading issues have been fixed and we are in a good state to switch on the checks again.
>>> The following exception would mean that you've hit a thread check: IllegalStateException("This operation is permitted on the event thread only").
>>> In that case please check your threading and if everything seems correct - please contact the Glass team.
>>> Thank you.
>>> With best regards. Petr.
More information about the openjfx-dev