Skip to content

Java 9: Starting SwingStartup directly works, but not OpenRocket #346

@tibbe

Description

@tibbe

I can launch SwingStartup under Java 9 but using the OpenRocket entry point (which OpenRocket.jar uses) leads to the below exception.

I suspect JarInJarStarter is to blame somehow. Perhaps it interacts badly with the class path/module mechanisms of Java 9, given that it reconstructs the class path.

Possible solution: Is it possible to pass --add-modules=java.se.ee to the class loader that invokes SwingStartup from OpenRocket? That is a commonly recommended workaround for this particular NoClassDefFoundError exception. The issue is that Java 9 doesn't expose that API by default anymore (it was moved to a different module).

(Whether we can land Java 9 support in "unstable" yet is a different question. Right now I'm just trying to build a working jar locally.)

(The --permit-illegal-access is expected and unrelated.)

WARNING: --permit-illegal-access will be removed in the next major release
New classpath:
   file:/usr/local/google/home/tibell/src/openrocket/swing/bin/
   file:/usr/local/google/home/tibell/src/openrocket/swing/lib/jogl/jogl-all.jar
   file:/usr/local/google/home/tibell/src/openrocket/swing/lib/iText-5.0.2.jar
   file:/usr/local/google/home/tibell/src/openrocket/swing/lib/jcommon-1.0.18.jar
   file:/usr/local/google/home/tibell/src/openrocket/swing/lib/jfreechart-1.0.15.jar
   file:/usr/local/google/home/tibell/src/openrocket/swing/lib/
   file:/usr/local/google/home/tibell/src/openrocket/swing/lib/OrangeExtensions-1.2.jar
   file:/usr/local/google/home/tibell/src/openrocket/swing/lib/jogl/gluegen-rt.jar
   file:/usr/local/google/home/tibell/src/openrocket/core/bin/
   file:/usr/local/google/home/tibell/src/openrocket/core/lib-extra/RXTXcomm.jar
   file:/usr/local/google/home/tibell/src/openrocket/core/resources/
   file:/usr/local/google/home/tibell/src/openrocket/core/lib/opencsv-2.3.jar
   file:/usr/local/google/home/tibell/src/openrocket/core/lib/javax.inject.jar
   file:/usr/local/google/home/tibell/src/openrocket/core/lib/aopalliance.jar
   file:/usr/local/google/home/tibell/src/openrocket/core/lib/slf4j-api-1.7.5.jar
   file:/usr/local/google/home/tibell/src/openrocket/core/lib/annotation-detector-3.0.2.jar
   file:/usr/local/google/home/tibell/src/openrocket/lib-test/hamcrest-core-1.3.0RC1.jar
   file:/usr/local/google/home/tibell/src/openrocket/lib-test/hamcrest-library-1.3.0RC1.jar
   file:/usr/local/google/home/tibell/src/openrocket/lib-test/jmock-2.6.0-RC2.jar
   file:/usr/local/google/home/tibell/src/openrocket/lib-test/jmock-junit4-2.6.0-RC2.jar
   file:/usr/local/google/home/tibell/src/openrocket/lib-test/junit-dep-4.8.2.jar
   file:/usr/local/google/home/tibell/src/openrocket/lib-test/test-plugin.jar
   file:/usr/local/google/home/tibell/src/openrocket/lib-test/uispec4j-2.3-jdk16.jar
   file:/usr/local/google/home/tibell/src/openrocket/core/lib/guice-4.1.0.jar
   file:/usr/local/google/home/tibell/src/openrocket/core/lib/guice-multibindings-4.1.0.jar
   file:/usr/local/google/home/tibell/src/openrocket/swing/lib/logback-classic-1.0.12.jar
   file:/usr/local/google/home/tibell/src/openrocket/swing/lib/logback-core-1.0.12.jar
   file:/usr/local/google/home/tibell/src/openrocket/core/lib/guava-20.0.jar
   file:/usr/local/google/home/tibell/src/openrocket/swing/resources/
   file:/usr/local/google/home/tibell/src/openrocket/swing/lib/miglayout-4.0-swing.jar
   file:/usr/local/google/home/tibell/src/openrocket/swing/lib/rsyntaxtextarea-2.5.6.jar
115            INFO  [main] n.s.o.s.SwingStartup - Starting up OpenRocket version 15.03dev
122            INFO  [main] n.s.o.s.SwingStartup - Checking for graphics head
125            INFO  [main] n.s.o.s.SwingStartup - Moving startup to EDT
286            INFO  [AWT-EventQueue-0] n.s.o.s.SwingStartup - Initializing the splash screen
288            INFO  [AWT-EventQueue-0] n.s.o.s.SwingStartup - Registering exception handler
295            INFO  [AWT-EventQueue-0] n.s.o.s.SwingStartup - Loading databases
WARNING: Illegal access by com.google.inject.internal.cglib.core.$ReflectUtils$1 (file:/usr/local/google/home/tibell/src/openrocket/core/lib/guice-4.1.0.jar) to method java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) (permitted by --permit-illegal-access)
1217           ERROR [main] n.s.o.g.m.SwingExceptionHandler - Handling uncaught exception on thread=Thread[main,5,main]
java.lang.RuntimeException: Error starting OpenRocket
	at net.sf.openrocket.startup.jij.JarInJarStarter.runMain(JarInJarStarter.java:40) ~[bin/:na]
	at net.sf.openrocket.startup.OpenRocket.main(OpenRocket.java:36) ~[bin/:na]
Caused by: java.lang.reflect.InvocationTargetException: null
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
	at java.base/java.lang.reflect.Method.invoke(Method.java:563) ~[na:na]
	at net.sf.openrocket.startup.jij.JarInJarStarter.runMain(JarInJarStarter.java:38) ~[bin/:na]
	... 1 common frames omitted
Caused by: java.lang.reflect.InvocationTargetException: null
	at java.desktop/java.awt.EventQueue.invokeAndWait(EventQueue.java:1323) ~[na:na]
	at java.desktop/java.awt.EventQueue.invokeAndWait(EventQueue.java:1298) ~[na:na]
	at java.desktop/javax.swing.SwingUtilities.invokeAndWait(SwingUtilities.java:1475) ~[na:na]
	at net.sf.openrocket.startup.SwingStartup.main(SwingStartup.java:76) ~[bin/:na]
	... 6 common frames omitted
com.google.common.util.concurrent.ExecutionError: com.google.common.util.concurrent.ExecutionError: java.lang.NoClassDefFoundError: javax/script/ScriptEngineFactory
	at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2212) ~[guava-20.0.jar:na]
	at com.google.common.cache.LocalCache.get(LocalCache.java:4053) ~[guava-20.0.jar:na]
	at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:4057) ~[guava-20.0.jar:na]
	at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4986) ~[guava-20.0.jar:na]
	at com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:4992) ~[guava-20.0.jar:na]
	at com.google.inject.internal.FailableCache.get(FailableCache.java:48) ~[guice-4.1.0.jar:na]
	at com.google.inject.internal.ConstructorInjectorStore.get(ConstructorInjectorStore.java:50) ~[guice-4.1.0.jar:na]
	at com.google.inject.internal.ConstructorBindingImpl.initialize(ConstructorBindingImpl.java:138) ~[guice-4.1.0.jar:na]
	at com.google.inject.internal.InjectorImpl.initializeJitBinding(InjectorImpl.java:550) ~[guice-4.1.0.jar:na]
	at com.google.inject.internal.InjectorImpl.createJustInTimeBinding(InjectorImpl.java:887) ~[guice-4.1.0.jar:na]
	at com.google.inject.internal.InjectorImpl.createJustInTimeBindingRecursive(InjectorImpl.java:808) ~[guice-4.1.0.jar:na]
	at com.google.inject.internal.InjectorImpl.getJustInTimeBinding(InjectorImpl.java:285) ~[guice-4.1.0.jar:na]
	at com.google.inject.internal.InjectorImpl.getBindingOrThrow(InjectorImpl.java:217) ~[guice-4.1.0.jar:na]
	at com.google.inject.internal.InjectorImpl.getInternalFactory(InjectorImpl.java:893) ~[guice-4.1.0.jar:na]
	at com.google.inject.internal.FactoryProxy.notify(FactoryProxy.java:46) ~[guice-4.1.0.jar:na]
	at com.google.inject.internal.ProcessedBindingData.runCreationListeners(ProcessedBindingData.java:50) ~[guice-4.1.0.jar:na]
	at com.google.inject.internal.InternalInjectorCreator.initializeStatically(InternalInjectorCreator.java:134) ~[guice-4.1.0.jar:na]
	at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:107) ~[guice-4.1.0.jar:na]
	at com.google.inject.Guice.createInjector(Guice.java:99) ~[guice-4.1.0.jar:na]
	at com.google.inject.Guice.createInjector(Guice.java:73) ~[guice-4.1.0.jar:na]
	at com.google.inject.Guice.createInjector(Guice.java:62) ~[guice-4.1.0.jar:na]
	at net.sf.openrocket.startup.SwingStartup.runInEDT(SwingStartup.java:143) ~[bin/:na]
	at net.sf.openrocket.startup.SwingStartup.access$0(SwingStartup.java:126) ~[bin/:na]
	at net.sf.openrocket.startup.SwingStartup$1.run(SwingStartup.java:79) ~[bin/:na]
	at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:303) ~[na:na]
	at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:759) ~[na:na]
	at java.desktop/java.awt.EventQueue.access$500(EventQueue.java:97) ~[na:na]
	at java.desktop/java.awt.EventQueue$3.run(EventQueue.java:712) ~[na:na]
	at java.desktop/java.awt.EventQueue$3.run(EventQueue.java:706) ~[na:na]
	at java.base/java.security.AccessController.doPrivileged(Native Method) ~[na:na]
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:88) ~[na:na]
	at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:729) ~[na:na]
	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:199) ~[na:na]
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124) ~[na:na]
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113) ~[na:na]
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109) ~[na:na]
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) ~[na:na]
	at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90) ~[na:na]
Caused by: com.google.common.util.concurrent.ExecutionError: java.lang.NoClassDefFoundError: javax/script/ScriptEngineFactory
	at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2212) ~[guava-20.0.jar:na]
	at com.google.common.cache.LocalCache.get(LocalCache.java:4053) ~[guava-20.0.jar:na]
	at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:4057) ~[guava-20.0.jar:na]
	at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4986) ~[guava-20.0.jar:na]
	at com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:4992) ~[guava-20.0.jar:na]
	at com.google.inject.internal.FailableCache.get(FailableCache.java:48) ~[guice-4.1.0.jar:na]
	at com.google.inject.internal.MembersInjectorStore.get(MembersInjectorStore.java:68) ~[guice-4.1.0.jar:na]
	at com.google.inject.internal.ConstructorInjectorStore.createConstructor(ConstructorInjectorStore.java:75) ~[guice-4.1.0.jar:na]
	at com.google.inject.internal.ConstructorInjectorStore.access$000(ConstructorInjectorStore.java:29) ~[guice-4.1.0.jar:na]
	at com.google.inject.internal.ConstructorInjectorStore$1.create(ConstructorInjectorStore.java:37) ~[guice-4.1.0.jar:na]
	at com.google.inject.internal.ConstructorInjectorStore$1.create(ConstructorInjectorStore.java:33) ~[guice-4.1.0.jar:na]
	at com.google.inject.internal.FailableCache$1.load(FailableCache.java:37) ~[guice-4.1.0.jar:na]
	at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3628) ~[guava-20.0.jar:na]
	at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2336) ~[guava-20.0.jar:na]
	at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2295) ~[guava-20.0.jar:na]
	at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2208) ~[guava-20.0.jar:na]
	... 37 common frames omitted
Caused by: java.lang.NoClassDefFoundError: javax/script/ScriptEngineFactory
	at java.base/java.lang.Class.getDeclaredMethods0(Native Method) ~[na:na]
	at java.base/java.lang.Class.privateGetDeclaredMethods(Class.java:3134) ~[na:na]
	at java.base/java.lang.Class.getDeclaredMethods(Class.java:2285) ~[na:na]
	at com.google.inject.spi.InjectionPoint.getInjectionPoints(InjectionPoint.java:688) ~[guice-4.1.0.jar:na]
	at com.google.inject.spi.InjectionPoint.forInstanceMethodsAndFields(InjectionPoint.java:380) ~[guice-4.1.0.jar:na]
	at com.google.inject.internal.ConstructorBindingImpl.getInternalDependencies(ConstructorBindingImpl.java:165) ~[guice-4.1.0.jar:na]
	at com.google.inject.internal.InjectorImpl.getInternalDependencies(InjectorImpl.java:616) ~[guice-4.1.0.jar:na]
	at com.google.inject.internal.InjectorImpl.cleanup(InjectorImpl.java:572) ~[guice-4.1.0.jar:na]
	at com.google.inject.internal.InjectorImpl.initializeJitBinding(InjectorImpl.java:558) ~[guice-4.1.0.jar:na]
	at com.google.inject.internal.InjectorImpl.createJustInTimeBinding(InjectorImpl.java:887) ~[guice-4.1.0.jar:na]
	at com.google.inject.internal.InjectorImpl.createJustInTimeBindingRecursive(InjectorImpl.java:808) ~[guice-4.1.0.jar:na]
	at com.google.inject.internal.InjectorImpl.getJustInTimeBinding(InjectorImpl.java:285) ~[guice-4.1.0.jar:na]
	at com.google.inject.internal.InjectorImpl.getBindingOrThrow(InjectorImpl.java:217) ~[guice-4.1.0.jar:na]
	at com.google.inject.internal.SingleFieldInjector.<init>(SingleFieldInjector.java:42) ~[guice-4.1.0.jar:na]
	at com.google.inject.internal.MembersInjectorStore.getInjectors(MembersInjectorStore.java:131) ~[guice-4.1.0.jar:na]
	at com.google.inject.internal.MembersInjectorStore.createWithListeners(MembersInjectorStore.java:98) ~[guice-4.1.0.jar:na]
	at com.google.inject.internal.MembersInjectorStore.access$000(MembersInjectorStore.java:37) ~[guice-4.1.0.jar:na]
	at com.google.inject.internal.MembersInjectorStore$1.create(MembersInjectorStore.java:45) ~[guice-4.1.0.jar:na]
	at com.google.inject.internal.MembersInjectorStore$1.create(MembersInjectorStore.java:42) ~[guice-4.1.0.jar:na]
	at com.google.inject.internal.FailableCache$1.load(FailableCache.java:37) ~[guice-4.1.0.jar:na]
	at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3628) ~[guava-20.0.jar:na]
	at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2336) ~[guava-20.0.jar:na]
	at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2295) ~[guava-20.0.jar:na]
	at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2208) ~[guava-20.0.jar:na]
	... 52 common frames omitted
Caused by: java.lang.ClassNotFoundException: javax.script.ScriptEngineFactory
	at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:466) ~[na:na]
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:553) ~[na:na]
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:486) ~[na:na]
	... 76 common frames omitted

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions