This makes perfect sense. I was scratching my head about this, but now it's
clear as to why that code existed in the Control class in the first place.
Thanks!

- SR

Sandipan Razzaque | www.sandipan.net


On Wed, Apr 9, 2014 at 12:01 AM, Jonathan Giles
<jonathan.gi...@oracle.com>wrote:

> I'll leave Kevin to speak to the specifics of the JavaFX startup process,
> but the argument against what you are doing in your final paragraph is that
> this causes everyone to pay the controls tax even when they don't make use
> of UI controls in their application. In particular, this loads the controls
> css files (or their compiled bss form), and this is by no means a free (or
> cheap) operation.
>
> -- Jonathan
>
>
> On Wednesday, 9 April 2014 3:52:58 p.m., Sandipan Razzaque wrote:
>
>> Hi Kevin -
>>
>> Thanks for the clarification that this is indeed by design - and also
>> for the workarounds.
>>
>> For Clojure, the solution looks a little inelegant and isn't idiomatic
>> clojure - any import statement will effectively cause a class
>> initialization to happen - so if you have any source files with an
>> ":import <anything extending Control>" at the top you're kind of
>> screwed, because clojure will do a Class.forName at eval time. It's
>> nice that in nashorn we have the -fx option.
>>
>> Just want to gauge people's thoughts here: just as an experiment, I
>> tried moving the contents of the Control.java static init block into
>> LauncherImpl#launchApplication and there seem to be no visible effects
>> at least at a superficial level. My judgement of "not at a superficial
>> level" is based upon: running 'gradle test' and seeing the same result
>> as without making the change, running the sample 'hello world' app and
>> running the Ensemble and clicking around. A nice side effect of this
>> is of course we can import controls in dynamic language source files
>> in the correct way without blowing up...
>>
>> Cheers,
>> SR
>>
>>
>>
>> Sandipan Razzaque | www.sandipan.net <http://www.sandipan.net>
>>
>>
>>
>> On Tue, Apr 8, 2014 at 9:09 AM, Kevin Rushforth
>> <kevin.rushfo...@oracle.com <mailto:kevin.rushfo...@oracle.com>> wrote:
>>
>>     __
>>
>>     Hi,
>>
>>     What you've discovered is exactly how the Java launcher is
>>     intended to work (we have unit tests that verify this fact). The
>>     launcher recognizes a JavaFX application by checking whether the
>>     class to be launched extends javafx.application.Application. So
>>     this isn't a side effect, but an intentional behavior.
>>
>>     The advice given in the JIRA is what you will need to do before
>>     accessing JavaFX:
>>
>>     1) Call Application.launch(MyAppClass.class)
>>     2) Call "new JFXPanel()"
>>
>>     -- Kevin
>>
>>
>>
>>     Sandipan Razzaque wrote:
>>
>>>     Kevin/Jonathan -
>>>
>>>     Steve's example in the Jira captures perfectly what I was
>>>     encountering in Java, and I've been trying to boil it down into a
>>>     minimal failing example - reconciling it with what I've
>>>     experienced in dynamic languages.
>>>
>>>     Turns out it's about whether or not you extend Application. This
>>>     leads me to believe that it's something in Application's
>>>     classloading that enables your example to work cleanly.
>>>
>>>     Try your class out again - with the minor edits I've made below:
>>>
>>>     public class Example /* extends Application */ {
>>>        public static void main(String[] args) {
>>>            //this is called from a static block in
>>>     javafx.scene.control.Control
>>>            PlatformImpl.setDefaultPlatformUserAgentStylesheet();
>>>
>>>            Application.launch(args);
>>>        }
>>>
>>>     /*@Override*/
>>>        public void start(final Stage primaryStage) throws Exception {
>>>        }
>>>     }
>>>
>>>     Cheers,
>>>     SR
>>>
>>>
>>>
>>>     Sandipan Razzaque | www.sandipan.net <http://www.sandipan.net>
>>>
>>>
>>>
>>>     On Mon, Apr 7, 2014 at 9:42 PM, Richard Bair
>>>     <richard.b...@oracle.com <mailto:richard.b...@oracle.com>> wrote:
>>>
>>>         Yes, this is one of the few things that I just hate about IDEA.
>>>
>>>         On Apr 7, 2014, at 6:00 PM, Kevin Rushforth
>>>         <kevin.rushfo...@oracle.com
>>>         <mailto:kevin.rushfo...@oracle.com>> wrote:
>>>
>>>         > I can't speak to other IntelliJ issues, but the root cause
>>>         of this particular one is the same thing that Debbie ran into
>>>         last week -- IntelliJ doesn't launch programs using the
>>>         standard Java launcher. For whatever reason, it uses its own
>>>         launcher. This might be worth raising with JetBrains.
>>>         >
>>>         > -- Kevin
>>>         >
>>>         >
>>>         > Jonathan Giles wrote:
>>>         >> Kevin,
>>>         >>
>>>         >> Yes, that is the program I used, and yes, I get the
>>>         'Toolkit not initialized' exception. I am running IntelliJ,
>>>         so that is the reason. I switched over to Eclipse and the
>>>         code run as expected.
>>>         >>
>>>         >> I am slightly bothered by the occasional failures that
>>>         seem to be IntelliJ-specific. I have a gut feeling that it
>>>         doesn't always run all tests (or that it runs them slightly
>>>         differently to get different results than when run on the
>>>         command line). Does anyone know why this is?
>>>         >>
>>>         >> I'm actually most at home in Eclipse, so perhaps I should
>>>         switch to that as my primary IDE for OpenJFX development.
>>>         >>
>>>         >> -- Jonathan
>>>         >>
>>>         >> On 8/04/2014 11:29 a.m., Kevin Rushforth wrote:
>>>         >>> Just to make sure we are running the same program, the
>>>         one I ran to verify that RT-33954 is fixed was the simple
>>>         test program in the comments of that bug. Here it is (with
>>>         the imports omitted for brevity).
>>>         >>>
>>>         >>> public class Example extends Application {
>>>         >>>   public static void main(String[] args) {
>>>         >>>       //this is called from a static block in
>>>         javafx.scene.control.Control
>>>         >>>       PlatformImpl.setDefaultPlatformUserAgentStylesheet();
>>>         >>>
>>>         >>>       Application.launch(args);
>>>         >>>   }
>>>         >>>
>>>         >>>   @Override
>>>         >>>   public void start(final Stage primaryStage) throws
>>>         Exception {
>>>         >>>   }
>>>         >>> }
>>>         >>>
>>>         >>> The above program runs fine for me with no exception.
>>>         >>>
>>>         >>> Jonathan: are you seeing something different? Or perhaps
>>>         running a different example?
>>>         >>>
>>>         >>> NOTE: if you run this from IntelliJ it will not work. I
>>>         verified that with Debbie last week (on a different issue),
>>>         which may be why you are seeing a problem. Running it from
>>>         command line, from NB, or from Eclipse works.
>>>         >>>
>>>         >>> -- Kevin
>>>         >>>
>>>         >>>
>>>         >>> Jonathan Giles wrote:
>>>         >>>> Firstly, I agree - this does seem to still be
>>>         reproducible despite Kevin's comment that it should have been
>>>         resolved in JavaFX 8.0 due to RT-28754
>>>         <https://javafx-jira.kenai.com/browse/RT-28754>, so that is
>>>         troubling. I'll leave Kevin to comment on that.
>>>         >>>>
>>>         >>>> Secondly, RT-33954 was closed as a duplicate of RT-28754
>>>         <https://javafx-jira.kenai.com/browse/RT-28754>, so it would
>>>         be better to leave RT-33954 closed and move discussion
>>>         (including what you recently posted) into RT-28754
>>>         <https://javafx-jira.kenai.com/browse/RT-28754>. The
>>>         discussion can start in there and most probably a new bug
>>>         will need to be opened (as RT-28754
>>>         <https://javafx-jira.kenai.com/browse/RT-28754> did result in
>>>         a code change that at one point appears to have fixed the
>>>         problem, so we're possibly dealing with a regression).
>>>         >>>>
>>>         >>>> Thirdly, whether this is a suitable bug for someone
>>>         learning the ropes is debatable. I'll leave Kevin to offer
>>>         his thoughts, but perhaps you can propose a patch that
>>>         resolves this issue for you in your test scenarios. Also, a
>>>         good starting point is to develop a simple test application
>>>         that helps to demonstrate this issue (preferably the test
>>>         case is a single class with no dependencies), and which you
>>>         can then share in the jira issue via copy/paste into a comment.
>>>         >>>>
>>>         >>>> Fourthly, to be a contributor in the OpenJDK requires
>>>         you to follow a process to get the paperwork in order. It is
>>>         wise to get that started as soon as possible, as it can
>>>         sometimes take a while. Here's a link to the process:
>>>         http://openjdk.java.net/contribute/ The main thing is the OCA.
>>>         >>>>
>>>         >>>> Finally, welcome! :-)
>>>         >>>>
>>>         >>>> -- Jonathan
>>>         >>>>
>>>         >>>> On 6/04/2014 1:06 p.m., Sandipan Razzaque wrote:
>>>         >>>>> Hi JavaFX devs!
>>>         >>>>>
>>>         >>>>> I was wondering how people felt about re-opening this
>>>         bug? I don't believe
>>>         >>>>> it has been fixed (see my comment).
>>>         >>>>>
>>>         >>>>> I'm also happy to work on it. But, let me know if you
>>>         think my time would
>>>         >>>>> be better spent elsewhere. I'm keen to take on a small
>>>         bug to just get the
>>>         >>>>> hang of the process and community (I'll be stumbling
>>>         with mercurial along
>>>         >>>>> the way too!). I think this bug is an ideal candidate
>>>         for someone just
>>>         >>>>> learning the ropes.
>>>         >>>>>
>>>         >>>>> https://javafx-jira.kenai.com/browse/RT-33954
>>>         >>>>>
>>>         >>>>> Cheers,
>>>         >>>>> SR
>>>         >>>>>
>>>         >>>>> Sandipan Razzaque | www.sandipan.net
>>>         <http://www.sandipan.net>
>>>         >>>>
>>>         >>
>>>
>>>
>>>
>>

Reply via email to