Re: Integrating JFX Dialog/Stage in Swing application

2014-06-02 Thread Anthony Petrov

Platform.setImplicitExit(false)



This is the correct answer. Please see the javadoc for more details.

--
best regards,
Anthony

On 5/31/2014 10:19 PM, Jeff Martin wrote:

You might try calling that new JFXPanel() in your application main. Maybe go 
ahead and call Platform.setImplicitExit(false) as well.

jeff


On May 31, 2014, at 9:46 AM, Robert Krüger krue...@lesspain.de wrote:


That was quicker than I had hoped. Invoking close() on the stage
constructed in this way results in this here:

[ERROR|16:24:23] d.l.m.MediaTool Uncaught exception in thread JavaFX
Application Thread: [JavaFX Application Thread]
java.lang.IllegalStateException: This operation is permitted on the
event thread only; currentThread = JavaFX Application Thread
at com.sun.glass.ui.Application.checkEventThread(Application.java:427)
~[jfxrt.jar:na]
at com.sun.glass.ui.View.isClosed(View.java:409) ~[jfxrt.jar:na]
at 
com.sun.glass.ui.mac.MacTouchInputSupport.notifyNextTouchEvent(MacTouchInputSupport.java:122)
~[jfxrt.jar:na]
at 
com.sun.glass.ui.mac.MacGestureSupport.notifyNextTouchEvent(MacGestureSupport.java:77)
~[jfxrt.jar:na]

I checked in the debugger and com.sun.glass.ui.Application#eventThread
is null. This makes me believe the environment is not properly
initialized despite the invocation on new JFXPanel() that I have in
the EDT before the stage is built.

On Sat, May 31, 2014 at 4:15 PM, Robert Krüger krue...@lesspain.de wrote:

Hi Jeff,

thanks, yeah, that's a workaround I have also found. I am just asking
myself (and the JFX developers on this list) why this kind of
Integration is not supported directly.

Good to know that you have used this quite a bit. So I'll try using it
until someone brings up a nicer solution or I run into any problems
:-).

Cheers,

Robert

On Sat, May 31, 2014 at 3:57 PM, Jeff Martin j...@reportmill.com wrote:

I'm sure this isn't the proper answer, but I have used this call to initialize 
the FX toolkit on demand from various Swing contexts and it has always worked 
for me:

new javafx.embed.swing.JFXPanel();

Then you would need the Platform.runLater(). Usually for the whole method that 
creates your UI and shows the Stage. In some cases, I would make the first line 
of my method that ends up invoking the JFX dialog something like this:

public void doSomething()
{
// Ensure we're on FX thread
if(!Platform.isFXApplicationThread()) {
Platform.runLater(new Runnable() { public void run() { 
doSomething(); } return; }

… create FX UI and do stage.show() ...
}

I've done quite a bit of this and it works without problems (for me).

jeff martin

On May 31, 2014, at 7:27 AM, Robert Krüger krue...@lesspain.de wrote:


Hi,

I am trying something which I thought would technically be the easiest
way of migrating parts of an existing application from Swing to JFX,
i.e. have a Swing JMenuItem trigger the showing of a JFX stage because
I thought this would technically even be cleaner than to have a swing
dialog containing an JFXPanel.

Doing this results in the following Exception:

java.lang.IllegalStateException: Toolkit not initialized
at com.sun.javafx.application.PlatformImpl.runLater(PlatformImpl.java:276)
~[jfxrt.jar:na]
at com.sun.javafx.application.PlatformImpl.runLater(PlatformImpl.java:271)
~[jfxrt.jar:na]
at javafx.application.Platform.runLater(Platform.java:78) ~[jfxrt.jar:na]
at 
de.lesspain.mediatool.menu.ToolsSubmenu$1.actionPerformed(ToolsSubmenu.java:20)
~[

javadoc of runLater states:

This method must not be called before the FX runtime has been
initialized. For standard JavaFX applications that extend Application,
and use either the Java launcher or one of the launch methods in the
Application class to launch the application, the FX runtime is
initialized by the launcher before the Application class is loaded.
For Swing applications that use JFXPanel to display FX content, the FX
runtime is initialized when the first JFXPanel instance is
constructed.

So this is consistent. Still I am wondering, why it should not be
supported to just trigger opening a stage from a Swing menu? Either by
Platform.runLater autoinitializing or offering a separate method like
Platform.ensureInitialized().

Am I missing something obvious?

Thanks,

Robert






--
Robert Krüger
Managing Partner
Lesspain GmbH  Co. KG

www.lesspain-software.com




--
Robert Krüger
Managing Partner
Lesspain GmbH  Co. KG

www.lesspain-software.com




Integrating JFX Dialog/Stage in Swing application

2014-05-31 Thread Robert Krüger
Hi,

I am trying something which I thought would technically be the easiest
way of migrating parts of an existing application from Swing to JFX,
i.e. have a Swing JMenuItem trigger the showing of a JFX stage because
I thought this would technically even be cleaner than to have a swing
dialog containing an JFXPanel.

Doing this results in the following Exception:

java.lang.IllegalStateException: Toolkit not initialized
at com.sun.javafx.application.PlatformImpl.runLater(PlatformImpl.java:276)
~[jfxrt.jar:na]
at com.sun.javafx.application.PlatformImpl.runLater(PlatformImpl.java:271)
~[jfxrt.jar:na]
at javafx.application.Platform.runLater(Platform.java:78) ~[jfxrt.jar:na]
at 
de.lesspain.mediatool.menu.ToolsSubmenu$1.actionPerformed(ToolsSubmenu.java:20)
~[

javadoc of runLater states:

This method must not be called before the FX runtime has been
initialized. For standard JavaFX applications that extend Application,
and use either the Java launcher or one of the launch methods in the
Application class to launch the application, the FX runtime is
initialized by the launcher before the Application class is loaded.
For Swing applications that use JFXPanel to display FX content, the FX
runtime is initialized when the first JFXPanel instance is
constructed.

So this is consistent. Still I am wondering, why it should not be
supported to just trigger opening a stage from a Swing menu? Either by
Platform.runLater autoinitializing or offering a separate method like
Platform.ensureInitialized().

Am I missing something obvious?

Thanks,

Robert


Re: Integrating JFX Dialog/Stage in Swing application

2014-05-31 Thread Robert Krüger
Hi Jeff,

thanks, yeah, that's a workaround I have also found. I am just asking
myself (and the JFX developers on this list) why this kind of
Integration is not supported directly.

Good to know that you have used this quite a bit. So I'll try using it
until someone brings up a nicer solution or I run into any problems
:-).

Cheers,

Robert

On Sat, May 31, 2014 at 3:57 PM, Jeff Martin j...@reportmill.com wrote:
 I'm sure this isn't the proper answer, but I have used this call to 
 initialize the FX toolkit on demand from various Swing contexts and it has 
 always worked for me:

 new javafx.embed.swing.JFXPanel();

 Then you would need the Platform.runLater(). Usually for the whole method 
 that creates your UI and shows the Stage. In some cases, I would make the 
 first line of my method that ends up invoking the JFX dialog something like 
 this:

 public void doSomething()
 {
 // Ensure we're on FX thread
 if(!Platform.isFXApplicationThread()) {
 Platform.runLater(new Runnable() { public void run() { 
 doSomething(); } return; }

 … create FX UI and do stage.show() ...
 }

 I've done quite a bit of this and it works without problems (for me).

 jeff martin

 On May 31, 2014, at 7:27 AM, Robert Krüger krue...@lesspain.de wrote:

 Hi,

 I am trying something which I thought would technically be the easiest
 way of migrating parts of an existing application from Swing to JFX,
 i.e. have a Swing JMenuItem trigger the showing of a JFX stage because
 I thought this would technically even be cleaner than to have a swing
 dialog containing an JFXPanel.

 Doing this results in the following Exception:

 java.lang.IllegalStateException: Toolkit not initialized
 at com.sun.javafx.application.PlatformImpl.runLater(PlatformImpl.java:276)
 ~[jfxrt.jar:na]
 at com.sun.javafx.application.PlatformImpl.runLater(PlatformImpl.java:271)
 ~[jfxrt.jar:na]
 at javafx.application.Platform.runLater(Platform.java:78) ~[jfxrt.jar:na]
 at 
 de.lesspain.mediatool.menu.ToolsSubmenu$1.actionPerformed(ToolsSubmenu.java:20)
 ~[

 javadoc of runLater states:

 This method must not be called before the FX runtime has been
 initialized. For standard JavaFX applications that extend Application,
 and use either the Java launcher or one of the launch methods in the
 Application class to launch the application, the FX runtime is
 initialized by the launcher before the Application class is loaded.
 For Swing applications that use JFXPanel to display FX content, the FX
 runtime is initialized when the first JFXPanel instance is
 constructed.

 So this is consistent. Still I am wondering, why it should not be
 supported to just trigger opening a stage from a Swing menu? Either by
 Platform.runLater autoinitializing or offering a separate method like
 Platform.ensureInitialized().

 Am I missing something obvious?

 Thanks,

 Robert




-- 
Robert Krüger
Managing Partner
Lesspain GmbH  Co. KG

www.lesspain-software.com


Re: Integrating JFX Dialog/Stage in Swing application

2014-05-31 Thread Robert Krüger
That was quicker than I had hoped. Invoking close() on the stage
constructed in this way results in this here:

[ERROR|16:24:23] d.l.m.MediaTool Uncaught exception in thread JavaFX
Application Thread: [JavaFX Application Thread]
java.lang.IllegalStateException: This operation is permitted on the
event thread only; currentThread = JavaFX Application Thread
at com.sun.glass.ui.Application.checkEventThread(Application.java:427)
~[jfxrt.jar:na]
at com.sun.glass.ui.View.isClosed(View.java:409) ~[jfxrt.jar:na]
at 
com.sun.glass.ui.mac.MacTouchInputSupport.notifyNextTouchEvent(MacTouchInputSupport.java:122)
~[jfxrt.jar:na]
at 
com.sun.glass.ui.mac.MacGestureSupport.notifyNextTouchEvent(MacGestureSupport.java:77)
~[jfxrt.jar:na]

I checked in the debugger and com.sun.glass.ui.Application#eventThread
is null. This makes me believe the environment is not properly
initialized despite the invocation on new JFXPanel() that I have in
the EDT before the stage is built.

On Sat, May 31, 2014 at 4:15 PM, Robert Krüger krue...@lesspain.de wrote:
 Hi Jeff,

 thanks, yeah, that's a workaround I have also found. I am just asking
 myself (and the JFX developers on this list) why this kind of
 Integration is not supported directly.

 Good to know that you have used this quite a bit. So I'll try using it
 until someone brings up a nicer solution or I run into any problems
 :-).

 Cheers,

 Robert

 On Sat, May 31, 2014 at 3:57 PM, Jeff Martin j...@reportmill.com wrote:
 I'm sure this isn't the proper answer, but I have used this call to 
 initialize the FX toolkit on demand from various Swing contexts and it has 
 always worked for me:

 new javafx.embed.swing.JFXPanel();

 Then you would need the Platform.runLater(). Usually for the whole method 
 that creates your UI and shows the Stage. In some cases, I would make the 
 first line of my method that ends up invoking the JFX dialog something like 
 this:

 public void doSomething()
 {
 // Ensure we're on FX thread
 if(!Platform.isFXApplicationThread()) {
 Platform.runLater(new Runnable() { public void run() { 
 doSomething(); } return; }

 … create FX UI and do stage.show() ...
 }

 I've done quite a bit of this and it works without problems (for me).

 jeff martin

 On May 31, 2014, at 7:27 AM, Robert Krüger krue...@lesspain.de wrote:

 Hi,

 I am trying something which I thought would technically be the easiest
 way of migrating parts of an existing application from Swing to JFX,
 i.e. have a Swing JMenuItem trigger the showing of a JFX stage because
 I thought this would technically even be cleaner than to have a swing
 dialog containing an JFXPanel.

 Doing this results in the following Exception:

 java.lang.IllegalStateException: Toolkit not initialized
 at com.sun.javafx.application.PlatformImpl.runLater(PlatformImpl.java:276)
 ~[jfxrt.jar:na]
 at com.sun.javafx.application.PlatformImpl.runLater(PlatformImpl.java:271)
 ~[jfxrt.jar:na]
 at javafx.application.Platform.runLater(Platform.java:78) ~[jfxrt.jar:na]
 at 
 de.lesspain.mediatool.menu.ToolsSubmenu$1.actionPerformed(ToolsSubmenu.java:20)
 ~[

 javadoc of runLater states:

 This method must not be called before the FX runtime has been
 initialized. For standard JavaFX applications that extend Application,
 and use either the Java launcher or one of the launch methods in the
 Application class to launch the application, the FX runtime is
 initialized by the launcher before the Application class is loaded.
 For Swing applications that use JFXPanel to display FX content, the FX
 runtime is initialized when the first JFXPanel instance is
 constructed.

 So this is consistent. Still I am wondering, why it should not be
 supported to just trigger opening a stage from a Swing menu? Either by
 Platform.runLater autoinitializing or offering a separate method like
 Platform.ensureInitialized().

 Am I missing something obvious?

 Thanks,

 Robert




 --
 Robert Krüger
 Managing Partner
 Lesspain GmbH  Co. KG

 www.lesspain-software.com



-- 
Robert Krüger
Managing Partner
Lesspain GmbH  Co. KG

www.lesspain-software.com


Re: Integrating JFX Dialog/Stage in Swing application

2014-05-31 Thread Jeff Martin
You might try calling that new JFXPanel() in your application main. Maybe go 
ahead and call Platform.setImplicitExit(false) as well.

jeff


On May 31, 2014, at 9:46 AM, Robert Krüger krue...@lesspain.de wrote:

 That was quicker than I had hoped. Invoking close() on the stage
 constructed in this way results in this here:
 
 [ERROR|16:24:23] d.l.m.MediaTool Uncaught exception in thread JavaFX
 Application Thread: [JavaFX Application Thread]
 java.lang.IllegalStateException: This operation is permitted on the
 event thread only; currentThread = JavaFX Application Thread
 at com.sun.glass.ui.Application.checkEventThread(Application.java:427)
 ~[jfxrt.jar:na]
 at com.sun.glass.ui.View.isClosed(View.java:409) ~[jfxrt.jar:na]
 at 
 com.sun.glass.ui.mac.MacTouchInputSupport.notifyNextTouchEvent(MacTouchInputSupport.java:122)
 ~[jfxrt.jar:na]
 at 
 com.sun.glass.ui.mac.MacGestureSupport.notifyNextTouchEvent(MacGestureSupport.java:77)
 ~[jfxrt.jar:na]
 
 I checked in the debugger and com.sun.glass.ui.Application#eventThread
 is null. This makes me believe the environment is not properly
 initialized despite the invocation on new JFXPanel() that I have in
 the EDT before the stage is built.
 
 On Sat, May 31, 2014 at 4:15 PM, Robert Krüger krue...@lesspain.de wrote:
 Hi Jeff,
 
 thanks, yeah, that's a workaround I have also found. I am just asking
 myself (and the JFX developers on this list) why this kind of
 Integration is not supported directly.
 
 Good to know that you have used this quite a bit. So I'll try using it
 until someone brings up a nicer solution or I run into any problems
 :-).
 
 Cheers,
 
 Robert
 
 On Sat, May 31, 2014 at 3:57 PM, Jeff Martin j...@reportmill.com wrote:
 I'm sure this isn't the proper answer, but I have used this call to 
 initialize the FX toolkit on demand from various Swing contexts and it has 
 always worked for me:
 
new javafx.embed.swing.JFXPanel();
 
 Then you would need the Platform.runLater(). Usually for the whole method 
 that creates your UI and shows the Stage. In some cases, I would make the 
 first line of my method that ends up invoking the JFX dialog something like 
 this:
 
 public void doSomething()
 {
// Ensure we're on FX thread
if(!Platform.isFXApplicationThread()) {
Platform.runLater(new Runnable() { public void run() { 
 doSomething(); } return; }
 
… create FX UI and do stage.show() ...
 }
 
 I've done quite a bit of this and it works without problems (for me).
 
 jeff martin
 
 On May 31, 2014, at 7:27 AM, Robert Krüger krue...@lesspain.de wrote:
 
 Hi,
 
 I am trying something which I thought would technically be the easiest
 way of migrating parts of an existing application from Swing to JFX,
 i.e. have a Swing JMenuItem trigger the showing of a JFX stage because
 I thought this would technically even be cleaner than to have a swing
 dialog containing an JFXPanel.
 
 Doing this results in the following Exception:
 
 java.lang.IllegalStateException: Toolkit not initialized
 at com.sun.javafx.application.PlatformImpl.runLater(PlatformImpl.java:276)
 ~[jfxrt.jar:na]
 at com.sun.javafx.application.PlatformImpl.runLater(PlatformImpl.java:271)
 ~[jfxrt.jar:na]
 at javafx.application.Platform.runLater(Platform.java:78) ~[jfxrt.jar:na]
 at 
 de.lesspain.mediatool.menu.ToolsSubmenu$1.actionPerformed(ToolsSubmenu.java:20)
 ~[
 
 javadoc of runLater states:
 
 This method must not be called before the FX runtime has been
 initialized. For standard JavaFX applications that extend Application,
 and use either the Java launcher or one of the launch methods in the
 Application class to launch the application, the FX runtime is
 initialized by the launcher before the Application class is loaded.
 For Swing applications that use JFXPanel to display FX content, the FX
 runtime is initialized when the first JFXPanel instance is
 constructed.
 
 So this is consistent. Still I am wondering, why it should not be
 supported to just trigger opening a stage from a Swing menu? Either by
 Platform.runLater autoinitializing or offering a separate method like
 Platform.ensureInitialized().
 
 Am I missing something obvious?
 
 Thanks,
 
 Robert
 
 
 
 
 --
 Robert Krüger
 Managing Partner
 Lesspain GmbH  Co. KG
 
 www.lesspain-software.com
 
 
 
 -- 
 Robert Krüger
 Managing Partner
 Lesspain GmbH  Co. KG
 
 www.lesspain-software.com



Re: Integrating JFX Dialog/Stage in Swing application

2014-05-31 Thread Werner Lehmann

Hi Robert,

the problem with this is that the stage cannot have a swing window as 
its owner. If users misclick the stage will hide behind your main 
window. But if that is acceptable...


Werner

On 31.05.2014 14:27, Robert Krüger wrote:

have a Swing JMenuItem trigger the showing of a JFX stage