With respect to reflection, it seems like the module system really wants you to use Lookup capabilities rather than "open" modules to reflection. That is, JFX could be changed to use
var objects = FXMLLoader.load(MethodHandles.lookup(), new URL("....")); The semantics of a Lookup are that it grants whoever holds the object the same access rights as whoever created it. Thus if an object creates a Lookup and gives it to a framework, that framework can access anything the object could itself access. The lookup object would then be used to do reflection rather than the classical reflection API. With this change the API would guide you to a form that always works, regardless of module configuration. Due to its nature as a GUI toolkit JFX often needs to reflect over user code. It may be worth considering a deeper upgrade in which a Lookup object is provided during application startup, and passed in to the framework e.g. the Application class. Lookup objects can be 'teleported' so JFX components that wish to work with user GUI code generically can then fetch a Lookup from a central place. However, this wouldn't allow overriding of access control (i.e. FXMLLoader that takes such a lookup and teleports it to the right class for access, wouldn't be able to access private fields, because the original place where the lookup was created also couldn't).