Closed
Description
When attempting to generate a native image using code that uses JavaFX, an error occurs. I can't exactly understand the root cause given the error message, but I can give the steps to reproduce it.
- Create a file HelloWorld.java, containing the example in Example 1-1 at https://docs.oracle.com/javafx/2/get_started/hello_world.htm
- Using the Graal toolchain (in this case, graalvm-1.0.0-rc1 from Oracle download was used, on MacOS), compile the Java file:
javac HelloWorld.java
- Run the native image compiler:
native-image -cp . helloworld.HelloWorld
The following error is then shown:
Build on Server(pid: 19186, port: 26681)
classlist: 120.71 ms
(cap): 1,658.04 ms
setup: 1,967.81 ms
analysis: 2,664.79 ms
error: unsupported features in 6 methods
Detailed message:
Error: Error loading a referenced type: java.lang.NoClassDefFoundError: Could not initialize class javafx.stage.Screen
Trace:
at parsing com.sun.javafx.tk.quantum.QuantumToolkit.initSceneGraph(QuantumToolkit.java:298)
Call path from entry point to com.sun.javafx.tk.quantum.QuantumToolkit.initSceneGraph():
at com.sun.javafx.tk.quantum.QuantumToolkit.initSceneGraph(QuantumToolkit.java:298)
at com.sun.javafx.tk.quantum.QuantumToolkit.runToolkit(QuantumToolkit.java:340)
at com.sun.javafx.tk.quantum.QuantumToolkit.lambda$startup$402(QuantumToolkit.java:257)
at com.sun.javafx.tk.quantum.QuantumToolkit$$Lambda$611/1642062728.run(Unknown Source)
at com.oracle.svm.core.JavaMainWrapper$JavaMainSupport.executeHooks(JavaMainWrapper.java:105)
at com.oracle.svm.core.JavaMainWrapper$JavaMainSupport.executeStartupHooks(JavaMainWrapper.java:91)
at com.oracle.svm.core.JavaMainWrapper.run(JavaMainWrapper.java:198)
at Lcom/oracle/svm/core/code/CEntryPointCallStubs;.com_002eoracle_002esvm_002ecore_002eJavaMainWrapper_002erun_0028int_002corg_002egraalvm_002enativeimage_002ec_002etype_002eCCharPointerPointer_0029(generated:0)
Original exception that caused the problem: java.lang.NoClassDefFoundError: Could not initialize class javafx.stage.Screen
at sun.misc.Unsafe.ensureClassInitialized(Native Method)
at jdk.vm.ci.hotspot.HotSpotConstantPool.loadReferencedType(HotSpotConstantPool.java:695)
at com.oracle.graal.pointsto.infrastructure.WrappedConstantPool.loadReferencedType(WrappedConstantPool.java:58)
at org.graalvm.compiler.java.BytecodeParser.maybeEagerlyResolve(BytecodeParser.java:3847)
at com.oracle.svm.hosted.phases.SharedGraphBuilderPhase$SharedBytecodeParser.maybeEagerlyResolve(SharedGraphBuilderPhase.java:102)
at org.graalvm.compiler.java.BytecodeParser.lookupMethod(BytecodeParser.java:3801)
at org.graalvm.compiler.java.BytecodeParser.genInvokeStatic(BytecodeParser.java:1380)
at com.oracle.svm.hosted.phases.SharedGraphBuilderPhase$SharedBytecodeParser.genInvokeStatic(SharedGraphBuilderPhase.java:171)
at org.graalvm.compiler.java.BytecodeParser.processBytecode(BytecodeParser.java:4677)
at org.graalvm.compiler.java.BytecodeParser.iterateBytecodesForBlock(BytecodeParser.java:3065)
at org.graalvm.compiler.java.BytecodeParser.processBlock(BytecodeParser.java:2886)
at org.graalvm.compiler.java.BytecodeParser.build(BytecodeParser.java:880)
at org.graalvm.compiler.java.BytecodeParser.buildRootMethod(BytecodeParser.java:774)
at org.graalvm.compiler.java.GraphBuilderPhase$Instance.run(GraphBuilderPhase.java:93)
at org.graalvm.compiler.phases.Phase.run(Phase.java:47)
at org.graalvm.compiler.phases.BasePhase.apply(BasePhase.java:195)
at org.graalvm.compiler.phases.Phase.apply(Phase.java:40)
at org.graalvm.compiler.phases.Phase.apply(Phase.java:36)
at com.oracle.graal.pointsto.flow.MethodTypeFlowBuilder.parse(MethodTypeFlowBuilder.java:195)
at com.oracle.graal.pointsto.flow.MethodTypeFlowBuilder.apply(MethodTypeFlowBuilder.java:319)
at com.oracle.graal.pointsto.flow.MethodTypeFlow.doParse(MethodTypeFlow.java:308)
at com.oracle.graal.pointsto.flow.MethodTypeFlow.ensureParsed(MethodTypeFlow.java:298)
at com.oracle.graal.pointsto.flow.MethodTypeFlow.addContext(MethodTypeFlow.java:105)
at com.oracle.graal.pointsto.flow.StaticInvokeTypeFlow.update(InvokeTypeFlow.java:344)
at com.oracle.graal.pointsto.BigBang$2.run(BigBang.java:498)
at com.oracle.graal.pointsto.util.CompletionExecutor.lambda$execute$0(CompletionExecutor.java:172)
at java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1402)
at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
Error: Error loading a referenced type: java.lang.NoClassDefFoundError: Could not initialize class javafx.stage.Screen
Trace:
at parsing javafx.stage.Window.<init>(Window.java:1209)
Call path from entry point to javafx.stage.Window.<init>():
at javafx.stage.Window.<init>(Window.java:155)
at javafx.stage.Stage.<init>(Stage.java:239)
at javafx.stage.Stage.<init>(Stage.java:227)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$159(LauncherImpl.java:783)
at com.sun.javafx.application.LauncherImpl$$Lambda$546/1165191125.run(Unknown Source)
at com.oracle.svm.core.JavaMainWrapper$JavaMainSupport.executeHooks(JavaMainWrapper.java:105)
at com.oracle.svm.core.JavaMainWrapper$JavaMainSupport.executeStartupHooks(JavaMainWrapper.java:91)
at com.oracle.svm.core.JavaMainWrapper.run(JavaMainWrapper.java:198)
at Lcom/oracle/svm/core/code/CEntryPointCallStubs;.com_002eoracle_002esvm_002ecore_002eJavaMainWrapper_002erun_0028int_002corg_002egraalvm_002enativeimage_002ec_002etype_002eCCharPointerPointer_0029(generated:0)
Original exception that caused the problem: java.lang.NoClassDefFoundError: Could not initialize class javafx.stage.Screen
at sun.misc.Unsafe.ensureClassInitialized(Native Method)
at jdk.vm.ci.hotspot.HotSpotConstantPool.loadReferencedType(HotSpotConstantPool.java:695)
at com.oracle.graal.pointsto.infrastructure.WrappedConstantPool.loadReferencedType(WrappedConstantPool.java:58)
at org.graalvm.compiler.java.BytecodeParser.maybeEagerlyResolve(BytecodeParser.java:3847)
at com.oracle.svm.hosted.phases.SharedGraphBuilderPhase$SharedBytecodeParser.maybeEagerlyResolve(SharedGraphBuilderPhase.java:102)
at org.graalvm.compiler.java.BytecodeParser.lookupMethod(BytecodeParser.java:3801)
at org.graalvm.compiler.java.BytecodeParser.genInvokeStatic(BytecodeParser.java:1380)
at com.oracle.svm.hosted.phases.SharedGraphBuilderPhase$SharedBytecodeParser.genInvokeStatic(SharedGraphBuilderPhase.java:171)
at org.graalvm.compiler.java.BytecodeParser.processBytecode(BytecodeParser.java:4677)
at org.graalvm.compiler.java.BytecodeParser.iterateBytecodesForBlock(BytecodeParser.java:3065)
at org.graalvm.compiler.java.BytecodeParser.processBlock(BytecodeParser.java:2886)
at org.graalvm.compiler.java.BytecodeParser.build(BytecodeParser.java:880)
at org.graalvm.compiler.java.BytecodeParser.buildRootMethod(BytecodeParser.java:774)
at org.graalvm.compiler.java.GraphBuilderPhase$Instance.run(GraphBuilderPhase.java:93)
at org.graalvm.compiler.phases.Phase.run(Phase.java:47)
at org.graalvm.compiler.phases.BasePhase.apply(BasePhase.java:195)
at org.graalvm.compiler.phases.Phase.apply(Phase.java:40)
at org.graalvm.compiler.phases.Phase.apply(Phase.java:36)
at com.oracle.graal.pointsto.flow.MethodTypeFlowBuilder.parse(MethodTypeFlowBuilder.java:195)
at com.oracle.graal.pointsto.flow.MethodTypeFlowBuilder.apply(MethodTypeFlowBuilder.java:319)
at com.oracle.graal.pointsto.flow.MethodTypeFlow.doParse(MethodTypeFlow.java:308)
at com.oracle.graal.pointsto.flow.MethodTypeFlow.ensureParsed(MethodTypeFlow.java:298)
at com.oracle.graal.pointsto.flow.MethodTypeFlow.addContext(MethodTypeFlow.java:105)
at com.oracle.graal.pointsto.flow.SpecialInvokeTypeFlow.onObservedUpdate(InvokeTypeFlow.java:419)
at com.oracle.graal.pointsto.flow.TypeFlow.notifyObservers(TypeFlow.java:345)
at com.oracle.graal.pointsto.flow.TypeFlow.update(TypeFlow.java:387)
at com.oracle.graal.pointsto.BigBang$2.run(BigBang.java:498)
at com.oracle.graal.pointsto.util.CompletionExecutor.lambda$execute$0(CompletionExecutor.java:172)
at java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1402)
at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
Error: Must not have a started Thread in the image heap.
Trace: object com.sun.javafx.tk.quantum.QuantumRenderer
object java.util.concurrent.atomic.AtomicReference
method com.sun.javafx.tk.quantum.QuantumRenderer.getInstance()
Call path from entry point to com.sun.javafx.tk.quantum.QuantumRenderer.getInstance():
at com.sun.javafx.tk.quantum.QuantumRenderer.getInstance(QuantumRenderer.java:258)
at com.sun.javafx.tk.quantum.QuantumToolkit.init(QuantumToolkit.java:221)
at com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:248)
at com.sun.javafx.application.PlatformImpl.lambda$tkExit$177(PlatformImpl.java:450)
at com.sun.javafx.application.PlatformImpl$$Lambda$555/2063860391.run(Unknown Source)
at com.oracle.svm.core.JavaMainWrapper$JavaMainSupport.executeHooks(JavaMainWrapper.java:105)
at com.oracle.svm.core.JavaMainWrapper$JavaMainSupport.executeStartupHooks(JavaMainWrapper.java:91)
at com.oracle.svm.core.JavaMainWrapper.run(JavaMainWrapper.java:198)
at Lcom/oracle/svm/core/code/CEntryPointCallStubs;.com_002eoracle_002esvm_002ecore_002eJavaMainWrapper_002erun_0028int_002corg_002egraalvm_002enativeimage_002ec_002etype_002eCCharPointerPointer_0029(generated:0)
Error: Must not have a started Thread in the image heap.
Trace: field com.sun.prism.es2.ES2Pipeline.creator
Error: Must not have a started Thread in the image heap.
Trace: object java.util.concurrent.ThreadPoolExecutor$Worker
object java.util.HashMap$Node
object java.util.HashMap$Node[]
object java.util.HashMap
object java.util.HashSet
object com.sun.javafx.tk.quantum.QuantumRenderer
object java.util.concurrent.atomic.AtomicReference
method com.sun.javafx.tk.quantum.QuantumRenderer.getInstance()
Call path from entry point to com.sun.javafx.tk.quantum.QuantumRenderer.getInstance():
at com.sun.javafx.tk.quantum.QuantumRenderer.getInstance(QuantumRenderer.java:258)
at com.sun.javafx.tk.quantum.QuantumToolkit.init(QuantumToolkit.java:221)
at com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:248)
at com.sun.javafx.application.PlatformImpl.lambda$tkExit$177(PlatformImpl.java:450)
at com.sun.javafx.application.PlatformImpl$$Lambda$555/2063860391.run(Unknown Source)
at com.oracle.svm.core.JavaMainWrapper$JavaMainSupport.executeHooks(JavaMainWrapper.java:105)
at com.oracle.svm.core.JavaMainWrapper$JavaMainSupport.executeStartupHooks(JavaMainWrapper.java:91)
at com.oracle.svm.core.JavaMainWrapper.run(JavaMainWrapper.java:198)
at Lcom/oracle/svm/core/code/CEntryPointCallStubs;.com_002eoracle_002esvm_002ecore_002eJavaMainWrapper_002erun_0028int_002corg_002egraalvm_002enativeimage_002ec_002etype_002eCCharPointerPointer_0029(generated:0)
Error: Must not have a started Thread in the image heap.
Trace: object java.util.concurrent.locks.AbstractQueuedSynchronizer$Node
object java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject
object java.util.concurrent.LinkedBlockingQueue
object com.sun.javafx.tk.quantum.QuantumRenderer
object java.util.concurrent.atomic.AtomicReference
method com.sun.javafx.tk.quantum.QuantumRenderer.getInstance()
Call path from entry point to com.sun.javafx.tk.quantum.QuantumRenderer.getInstance():
at com.sun.javafx.tk.quantum.QuantumRenderer.getInstance(QuantumRenderer.java:258)
at com.sun.javafx.tk.quantum.QuantumToolkit.init(QuantumToolkit.java:221)
at com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:248)
at com.sun.javafx.application.PlatformImpl.lambda$tkExit$177(PlatformImpl.java:450)
at com.sun.javafx.application.PlatformImpl$$Lambda$555/2063860391.run(Unknown Source)
at com.oracle.svm.core.JavaMainWrapper$JavaMainSupport.executeHooks(JavaMainWrapper.java:105)
at com.oracle.svm.core.JavaMainWrapper$JavaMainSupport.executeStartupHooks(JavaMainWrapper.java:91)
at com.oracle.svm.core.JavaMainWrapper.run(JavaMainWrapper.java:198)
at Lcom/oracle/svm/core/code/CEntryPointCallStubs;.com_002eoracle_002esvm_002ecore_002eJavaMainWrapper_002erun_0028int_002corg_002egraalvm_002enativeimage_002ec_002etype_002eCCharPointerPointer_0029(generated:0)
Error: Processing image build request failed
If you need more information, please let me know. Thanks.