Problem using JavaFX Application class

Alex Buckley alex.buckley at oracle.com
Thu Feb 25 19:59:19 UTC 2016


On 2/25/2016 11:24 AM, Sander Mak wrote:
> I'm not sure I follow this. ServiceLoader lives in the java.base
> module, and my service implementation class lives in my application
> module (without being exported). How is it not a 'superpower' that
> ServiceLoader can reach into my application module's non-exported
> package to instantiate that class? Or maybe I should adjust my view
> and think of the module system as responsible for doing the
> instantiation by virtue of the 'provides .. with ..' clause in
> module-info. As you can probably tell I'm not burdened by any
> implementation knowledge of the modular service loading mechanism at
> this point...

JavaFX isn't using ServiceLoader to discover and instantiate service 
providers of a well known service interface. Since ServiceLoader isn't 
in the picture, javafx.application.Application is not a service 
interface (no JavaFX module 'uses' it) and your main class is not a 
service provider (no user module 'provides' it).

JavaFX is simply using Core Reflection to instantiate a known class 
directly (Class::forName/newInstance and presumably 
Class::isAssignableFrom to check subclassing of jfx.a.Application). Core 
Reflection requires the class being instantiated to be accessible.

Alex


More information about the jigsaw-dev mailing list