Javafx embedded in swing multithreaded toolkit issue
Pedro Duque Vieira
pedro.duquevieira at gmail.com
Wed Mar 21 11:58:02 PDT 2012
Hi Anthony,
Ok, I see.. So is there any solution to this problem?
Thanks,
On Wed, Mar 21, 2012 at 6:55 PM, Anthony Petrov
<anthony.petrov at oracle.com>wrote:
> Hi Pedro,
>
> Tooltips and combo-box popups are examples of scenes that use top-level
> windows. Even if the component showing the popup is embedded into a
> JFXPanel, its popups are always top-level windows.
>
> --
> best regards,
> Anthony
>
>
> On 3/21/2012 8:51 PM, Pedro Duque Vieira wrote:
>
>> ... or couldn't it be a requirement, to have scenes only embedded on
>> JFXPanel?
>>
>> On Wed, Mar 21, 2012 at 2:04 PM, Pedro Duque Vieira <
>> pedro.duquevieira at gmail.com> wrote:
>>
>> Hi Artem, thanks for the reply.
>>>
>>>
>>> If FX lived on Swing event dispatch thread, all the FX top-level windows
>>>
>>>> (that are not embedded into JFXPanel) would never receive any events.
>>>>
>>>> In this scenario (embedding javafx in swing), what situations would
>>> there
>>> be on which top level windows aren't embedded into JFXPanel?
>>>
>>> I think this problem is very important. If things continue as they are,
>>> embedding javafx into swing will be virtually impossible as this blog
>>> post
>>> illustrates:
>>> http://weblogs.java.net/blog/**kgh/archive/2004/10/**
>>> multithreaded_t.html<http://weblogs.java.net/blog/kgh/archive/2004/10/multithreaded_t.html>
>>>
>>> Cheers,
>>>
>>>
>>> On Wed, Mar 21, 2012 at 9:23 AM, Artem Ananiev <artem.ananiev at oracle.com
>>> >**wrote:
>>>
>>> On 3/21/2012 6:17 AM, Pedro Duque Vieira wrote:
>>>>
>>>> Hi,
>>>>>
>>>>> I've been working for a while on a swing app that has a javafx scene
>>>>> embedded on it.
>>>>>
>>>>> So in this scenario we have two UI threads, one for the swing part and
>>>>> one
>>>>> for the javafx scene (the application thread).
>>>>> This situation creates a multithreaded ui toolkit which is basically a
>>>>> nightmare for development.
>>>>>
>>>>> I don't know if this is possible but it I think it would be best to
>>>>> merge
>>>>> the swing and the javafx application thread into one when on this
>>>>> scenario.
>>>>>
>>>>> In JavaFX/SWT bridge (FXCanvas) we do exactly this: FX application
>>>> thread
>>>> is the same as SWT event thread. Unfortunately, in JavaFX/Swing case it
>>>> is
>>>> not possible.
>>>>
>>>> In a few words, Swing event dispatch thread only pumps Java events. All
>>>> the native events are dispatched on another thread, which is called AWT
>>>> toolkit thread. This thread cannot be accessed from outside of AWT, it's
>>>> not a part of public API. If FX lived on Swing event dispatch thread,
>>>> all
>>>> the FX top-level windows (that are not embedded into JFXPanel) would
>>>> never
>>>> receive any events.
>>>>
>>>> Thanks,
>>>>
>>>> Artem
>>>>
>>>>
>>>> One other possible solution that comes to my mind and also a much
>>>>
>>>>> simpler
>>>>> and quicker one is to add a Platform.invokeAndWait(like what exists on
>>>>> swing) alongside the Platform.runLater to the javafx API.
>>>>> And each time I want to invoke something on the javafx App thread from
>>>>> the
>>>>> swing ui thread I call invokeAndWait instead of runLater. So
>>>>> effectively
>>>>> the two UI threads become only one, because they are not running
>>>>> concurrently but sequentially instead.
>>>>>
>>>>>
>>> --
>>> Pedro Duque Vieira
>>>
>>>
>>
>>
>>
--
Pedro Duque Vieira
More information about the openjfx-dev
mailing list