[graalvm-users] [External] : java.lang.Thread.sleep() supported in GraalVM?

Eric Samson erix.samson at gmail.com
Tue Oct 17 16:29:15 UTC 2023


Hi GraalVM team,

Summary of my journey to the Graal:

   - I first removed almost everything from my Groovy app, until it was a
   kind of HelloWorld. --> It worked!!! 🤗
      - I used the --initialize-at-build-time option.
      - I was surprised by the app.exe file size: around 38Mb. Is that
      expected for a simple HelloWorld app?
      - The startup time was not better than simply running the Java app
      with the GraalVM. Is that normal? If I run the app another time then it's
      much faster, but globally launch time is very inconsistent.
      - It takes 4 to 6 minutes to build the exe file. My PC is not
      super-fast, but is that a normal response time for native-machine?
   - Then I started to progressively reintroduce some Groovy code.
   - It worked well... until I reintroduced the first Swing component
   (JPanel)
      - --> I had to remove the --initialize-at-build-time option to make
      it work.
      - Now, the exe file size is 60Mb, plus 9 DLLs have been generated. Is
      there a way to generate a single exe file, with no DLL?
   - Then I introduced a JLabel in my JPanel.
   - --> I can create the .exe file.
      - But the execution crashes at the initialization of the Font (there
      AWT is using reflection). 😥
      - I'm stuck here, I have tried to initialize the label differently,
      but it always crashes.
      - See the stackTrace below.
      - A FontManager.DLL has been generated.
      - An entry for FontManager has been generated by the native agent in
      the reflect-config.json file:
      -

      {
        "name":"sun.awt.Win32FontManager",
        "methods":[{"name":"<init>","parameterTypes":[] }]
      },



I'm not sure about what to test next, to move forward.
Any help would be greatly appreciated. Thanks in advance.

FYI, here is the stackTrace:
Exception in thread "main" java.lang.InternalError:
java.lang.reflect.InvocationTargetException
        at java.desktop at 17.0.8
/sun.font.FontManagerFactory$1.run(FontManagerFactory.java:87)
        at java.base at 17.0.8
/java.security.AccessController.executePrivileged(AccessController.java:171)
        at java.base at 17.0.8
/java.security.AccessController.doPrivileged(AccessController.java:318)
        at java.desktop at 17.0.8
/sun.font.FontManagerFactory.getInstance(FontManagerFactory.java:75)
        at java.desktop at 17.0.8
/sun.font.SunFontManager.getInstance(SunFontManager.java:248)
        at java.desktop at 17.0.8
/sun.font.FontDesignMetrics.getMetrics(FontDesignMetrics.java:266)
        at java.desktop at 17.0.8
/sun.swing.SwingUtilities2.getFontMetrics(SwingUtilities2.java:1242)
        at java.desktop at 17.0.8
/javax.swing.JComponent.getFontMetrics(JComponent.java:1691)
        at java.desktop at 17.0.8
/sun.swing.SwingUtilities2.getFontMetrics(SwingUtilities2.java:355)
        at java.desktop at 17.0.8
/sun.swing.SwingUtilities2.getFontMetrics(SwingUtilities2.java:327)
        at java.desktop at 17.0.8
/javax.swing.plaf.basic.BasicLabelUI.paint(BasicLabelUI.java:187)
        at java.desktop at 17.0.8
/javax.swing.plaf.ComponentUI.update(ComponentUI.java:161)
        at java.desktop at 17.0.8
/javax.swing.JComponent.paintComponent(JComponent.java:842)
        at java.desktop at 17.0.8
/javax.swing.JComponent.paint(JComponent.java:1119)
        at java.desktop at 17.0.8
/javax.swing.JComponent.paintChildren(JComponent.java:952)
        at java.desktop at 17.0.8
/javax.swing.JComponent.paint(JComponent.java:1128)
        at java.desktop at 17.0.8
/javax.swing.JComponent.paintChildren(JComponent.java:952)
        at java.desktop at 17.0.8
/javax.swing.JComponent.paint(JComponent.java:1128)
        at java.desktop at 17.0.8
/javax.swing.JLayeredPane.paint(JLayeredPane.java:586)
        at java.desktop at 17.0.8
/javax.swing.JComponent.paintChildren(JComponent.java:952)
        at java.desktop at 17.0.8
/javax.swing.JComponent.paint(JComponent.java:1128)
        at java.desktop at 17.0.8
/java.awt.GraphicsCallback$PaintCallback.run(GraphicsCallback.java:39)
        at java.desktop at 17.0.8
/sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:75)
        at java.desktop at 17.0.8
/sun.awt.SunGraphicsCallback.runComponents(SunGraphicsCallback.java:112)
        at java.desktop at 17.0.8/java.awt.Container.paint(Container.java:2005)
        at java.desktop at 17.0.8/java.awt.Window.paint(Window.java:3959)
        at java.desktop at 17.0.8
/sun.awt.windows.WComponentPeer.paint(WComponentPeer.java:253)
        at java.desktop at 17.0.8
/sun.awt.windows.WCanvasPeer.paint(WCanvasPeer.java:81)
        at java.desktop at 17.0.8
/sun.awt.windows.WPanelPeer.paint(WPanelPeer.java:44)
        at java.desktop at 17.0.8
/sun.awt.windows.WWindowPeer.paint(WWindowPeer.java:71)
        at java.desktop at 17.0.8
/java.awt.GraphicsCallback$PeerPaintCallback.run(GraphicsCallback.java:87)
        at java.desktop at 17.0.8
/sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:75)
        at java.desktop at 17.0.8
/java.awt.Component.paintAll(Component.java:3363)
        at java.desktop at 17.0.8
/sun.awt.windows.TranslucentWindowPainter.updateWindow(TranslucentWindowPainter.java:148)
        at java.desktop at 17.0.8
/sun.awt.windows.WWindowPeer.updateWindow(WWindowPeer.java:822)
        at java.desktop at 17.0.8
/sun.awt.windows.WWindowPeer.show(WWindowPeer.java:298)
        at java.desktop at 17.0.8
/sun.awt.windows.WComponentPeer.setVisible(WComponentPeer.java:136)
        at java.desktop at 17.0.8/java.awt.Component.show(Component.java:1690)
        at java.desktop at 17.0.8/java.awt.Window.show(Window.java:1064)
        at java.desktop at 17.0.8/java.awt.Component.show(Component.java:1728)
        at java.desktop at 17.0.8
/java.awt.Component.setVisible(Component.java:1675)
        at java.desktop at 17.0.8/java.awt.Window.setVisible(Window.java:1036)
        at displaytime.App.main(App.groovy:122)

*::* Best regards, Erix


Le mar. 17 oct. 2023 à 11:17, Eric Samson <erix.samson at gmail.com> a écrit :

> ... (completing previous sentence) that's why I'm trying GraalVM now (to
> have better start time and real .exe).
>
> I also wanted to add this app is super simple: 1 class, 1 main method, 1
> JPanel, 1 JLabel, that's it.
> I'm not using any fancy Groovy dynamic trick, nor Groovy Swing Builder,
> this is just good old Swing in Groovy.
>
> *::* best regards, Erix
>
> Le mar. 17 oct. 2023 à 11:13, Eric Samson <erix.samson at gmail.com> a
> écrit :
>
>> I don't know if it can help, but I was able to package my Groovy Swing
>> app with JPackage. The only difficulty was to identify which Groovy jars
>> were needed.
>> Then creating the installer worked fine and I can run the installed exe.
>>
>> But if I understand well, this is not "real" native compilation, and
>> launch time still is too big for what I need. That's
>> ------------------------------
>> *De :* Eric Samson <erix.samson at gmail.com>
>> *Envoyé :* mardi 17 octobre 2023 10:10
>> *À :* Gilles DUBOSCQ <gilles.m.duboscq at oracle.com>; Eric Samson <
>> erix.samson at gmail.com>
>> *Cc :* graalvm-users at oss.oracle.com <graalvm-users at oss.oracle.com>
>> *Objet :* Re: [graalvm-users] [External] : java.lang.Thread.sleep()
>> supported in GraalVM?
>>
>> Hi Gilles and Christian,
>>
>> I'm a bit lost now.
>> I'm going to try 2 things:
>>
>>    - Migrate my simple Groovy Swing app to pure Java and see if it works.
>>    - Create a very simple Groovy app with no Swing and see if it works.
>>
>> Do you have other ideas to test?
>>
>> Best regards, Erix.
>> ------------------------------
>> *De :* Eric Samson via GraalVM-Users <graalvm-users at oss.oracle.com>
>> *Envoyé :* lundi 16 octobre 2023 20:33
>> *À :* Gilles DUBOSCQ <gilles.m.duboscq at oracle.com>
>> *Cc :* graalvm-users at oss.oracle.com <graalvm-users at oss.oracle.com>
>> *Objet :* Re: [graalvm-users] [External] : java.lang.Thread.sleep()
>> supported in GraalVM?
>>
>> I have tried both your suggestions and now the error messages get much
>> more complicated:
>>
>> Error: Classes that should be initialized at run time got initialized
>> during image building:
>>  org.codehaus.groovy.reflection.CachedClass$3 was unintentionally
>> initialized at build time. To see why
>> org.codehaus.groovy.reflection.CachedClass$3 got initialized use
>> --trace-class-initialization=org.codehaus.groovy.reflection.CachedClass$3
>> org.codehaus.groovy.runtime.dgmimpl.NumberNumberMultiply was
>> unintentionally initialized at build time. To see why
>> org.codehaus.groovy.runtime.dgmimpl.NumberNumberMultiply got initialized
>> use
>> --trace-class-initialization=org.codehaus.groovy.runtime.dgmimpl.NumberNumberMultiply
>> org.codehaus.groovy.runtime.DefaultGroovyMethods was unintentionally
>> initialized at build time. To see why
>> org.codehaus.groovy.runtime.DefaultGroovyMethods got initialized use
>> --trace-class-initialization=org.codehaus.groovy.runtime.DefaultGroovyMethods
>> org.codehaus.groovy.util.ReferenceBundle was unintentionally initialized
>> at build time. To see why org.codehaus.groovy.util.ReferenceBundle got
>> initialized use
>> --trace-class-initialization=org.codehaus.groovy.util.ReferenceBundle
>> org.codehaus.groovy.runtime.dgmimpl.arrays.DoubleArrayPutAtMetaMethod was
>> unintentionally initialized at build time. To see why
>> org.codehaus.groovy.runtime.dgmimpl.arrays.DoubleArrayPutAtMetaMethod got
>> initialized use
>> --trace-class-initialization=org.codehaus.groovy.runtime.dgmimpl.arrays.DoubleArrayPutAtMetaMethod
>> org.codehaus.groovy.runtime.dgmimpl.arrays.ObjectArrayGetAtMetaMethod was
>> unintentionally initialized at build time. To see why
>> org.codehaus.groovy.runtime.dgmimpl.arrays.ObjectArrayGetAtMetaMethod got
>> initialized use
>> --trace-class-initialization=org.codehaus.groovy.runtime.dgmimpl.arrays.ObjectArrayGetAtMetaMethod
>> org.codehaus.groovy.vmplugin.v8.IndyInterface was unintentionally
>> initialized at build time. To see why
>> org.codehaus.groovy.vmplugin.v8.IndyInterface got initialized use
>> --trace-class-initialization=org.codehaus.groovy.vmplugin.v8.IndyInterface
>> org.codehaus.groovy.reflection.stdclasses.IntegerCachedClass was
>> unintentionally initialized at build time. To see why
>> org.codehaus.groovy.reflection.stdclasses.IntegerCachedClass got
>> initialized use
>> --trace-class-initialization=org.codehaus.groovy.reflection.stdclasses.IntegerCachedClass
>> org.codehaus.groovy.runtime.GroovyCategorySupport was unintentionally
>> initialized at build time. To see why
>> org.codehaus.groovy.runtime.GroovyCategorySupport got initialized use
>> --trace-class-initialization=org.codehaus.groovy.runtime.GroovyCategorySupport
>> org.codehaus.groovy.reflection.CachedClass was unintentionally
>> initialized at build time. To see why
>> org.codehaus.groovy.reflection.CachedClass got initialized use
>> --trace-class-initialization=org.codehaus.groovy.reflection.CachedClass
>> org.codehaus.groovy.reflection.stdclasses.CachedClosureClass was
>> unintentionally initialized at build time. To see why
>> org.codehaus.groovy.reflection.stdclasses.CachedClosureClass got
>> initialized use
>> --trace-class-initialization=org.codehaus.groovy.reflection.stdclasses.CachedClosureClass
>> org.codehaus.groovy.reflection.stdclasses.NumberCachedClass was
>> unintentionally initialized at build time. To see why
>> org.codehaus.groovy.reflection.stdclasses.NumberCachedClass got initialized
>> use
>> --trace-class-initialization=org.codehaus.groovy.reflection.stdclasses.NumberCachedClass
>> org.codehaus.groovy.reflection.stdclasses.BigIntegerCachedClass was
>> unintentionally initialized at build time. To see why
>> org.codehaus.groovy.reflection.stdclasses.BigIntegerCachedClass got
>> initialized use
>> --trace-class-initialization=org.codehaus.groovy.reflection.stdclasses.BigIntegerCachedClass
>> org.codehaus.groovy.reflection.ClassInfo$LazyClassLoaderRef was
>> unintentionally initialized at build time. To see why
>> org.codehaus.groovy.reflection.ClassInfo$LazyClassLoaderRef got initialized
>> use
>> --trace-class-initialization=org.codehaus.groovy.reflection.ClassInfo$LazyClassLoaderRef
>> org.codehaus.groovy.reflection.ReflectionUtils was unintentionally
>> initialized at build time. To see why
>> org.codehaus.groovy.reflection.ReflectionUtils got initialized use
>> --trace-class-initialization=org.codehaus.groovy.reflection.ReflectionUtils
>> org.codehaus.groovy.reflection.GroovyClassValueFactory was
>> unintentionally initialized at build time. To see why
>> org.codehaus.groovy.reflection.GroovyClassValueFactory got initialized use
>> --trace-class-initialization=org.codehaus.groovy.reflection.GroovyClassValueFactory
>> org.codehaus.groovy.reflection.CachedClass$6 was unintentionally
>> initialized at build time. To see why
>> org.codehaus.groovy.reflection.CachedClass$6 got initialized use
>> --trace-class-initialization=org.codehaus.groovy.reflection.CachedClass$6
>> org.codehaus.groovy.vmplugin.v9.Java9 was unintentionally initialized at
>> build time. To see why org.codehaus.groovy.vmplugin.v9.Java9 got
>> initialized use
>> --trace-class-initialization=org.codehaus.groovy.vmplugin.v9.Java9
>> org.codehaus.groovy.runtime.dgmimpl.arrays.ShortArrayGetAtMetaMethod was
>> unintentionally initialized at build time. To see why
>> org.codehaus.groovy.runtime.dgmimpl.arrays.ShortArrayGetAtMetaMethod got
>> initialized use
>> --trace-class-initialization=org.codehaus.groovy.runtime.dgmimpl.arrays.ShortArrayGetAtMetaMethod
>> org.codehaus.groovy.runtime.dgmimpl.arrays.CharacterArrayGetAtMetaMethod
>> was unintentionally initialized at build time. To see why
>> org.codehaus.groovy.runtime.dgmimpl.arrays.CharacterArrayGetAtMetaMethod
>> got initialized use
>> --trace-class-initialization=org.codehaus.groovy.runtime.dgmimpl.arrays.CharacterArrayGetAtMetaMethod
>> org.codehaus.groovy.util.LazyReference was unintentionally initialized at
>> build time. To see why org.codehaus.groovy.util.LazyReference got
>> initialized use
>> --trace-class-initialization=org.codehaus.groovy.util.LazyReference
>> org.codehaus.groovy.runtime.dgmimpl.arrays.ShortArrayPutAtMetaMethod was
>> unintentionally initialized at build time. To see why
>> org.codehaus.groovy.runtime.dgmimpl.arrays.ShortArrayPutAtMetaMethod got
>> initialized use
>> --trace-class-initialization=org.codehaus.groovy.runtime.dgmimpl.arrays.ShortArrayPutAtMetaMethod
>> org.codehaus.groovy.runtime.dgmimpl.arrays.LongArrayPutAtMetaMethod was
>> unintentionally initialized at build time. To see why
>> org.codehaus.groovy.runtime.dgmimpl.arrays.LongArrayPutAtMetaMethod got
>> initialized use
>> --trace-class-initialization=org.codehaus.groovy.runtime.dgmimpl.arrays.LongArrayPutAtMetaMethod
>> org.codehaus.groovy.reflection.stdclasses.CharacterCachedClass was
>> unintentionally initialized at build time. To see why
>> org.codehaus.groovy.reflection.stdclasses.CharacterCachedClass got
>> initialized use
>> --trace-class-initialization=org.codehaus.groovy.reflection.stdclasses.CharacterCachedClass
>> org.codehaus.groovy.reflection.stdclasses.DoubleCachedClass was
>> unintentionally initialized at build time. To see why
>> org.codehaus.groovy.reflection.stdclasses.DoubleCachedClass got initialized
>> use
>> --trace-class-initialization=org.codehaus.groovy.reflection.stdclasses.DoubleCachedClass
>> org.codehaus.groovy.reflection.ClassInfo$LazyCachedClassRef was
>> unintentionally initialized at build time. To see why
>> org.codehaus.groovy.reflection.ClassInfo$LazyCachedClassRef got initialized
>> use
>> --trace-class-initialization=org.codehaus.groovy.reflection.ClassInfo$LazyCachedClassRef
>> org.codehaus.groovy.runtime.dgmimpl.NumberNumberDiv was unintentionally
>> initialized at build time. To see why
>> org.codehaus.groovy.runtime.dgmimpl.NumberNumberDiv got initialized use
>> --trace-class-initialization=org.codehaus.groovy.runtime.dgmimpl.NumberNumberDiv
>> org.codehaus.groovy.util.ReferenceType$2 was unintentionally initialized
>> at build time. To see why org.codehaus.groovy.util.ReferenceType$2 got
>> initialized use
>> --trace-class-initialization=org.codehaus.groovy.util.ReferenceType$2
>> groovy.lang.MetaClassImpl was unintentionally initialized at build time.
>> To see why groovy.lang.MetaClassImpl got initialized use
>> --trace-class-initialization=groovy.lang.MetaClassImpl
>> org.codehaus.groovy.runtime.dgmimpl.arrays.FloatArrayPutAtMetaMethod was
>> unintentionally initialized at build time. To see why
>> org.codehaus.groovy.runtime.dgmimpl.arrays.FloatArrayPutAtMetaMethod got
>> initialized use
>> --trace-class-initialization=org.codehaus.groovy.runtime.dgmimpl.arrays.FloatArrayPutAtMetaMethod
>> com.sun.beans.util.Cache$Kind$1 was unintentionally initialized at build
>> time. To see why com.sun.beans.util.Cache$Kind$1 got initialized use
>> --trace-class-initialization=com.sun.beans.util.Cache$Kind$1
>> org.codehaus.groovy.reflection.stdclasses.ArrayCachedClass was
>> unintentionally initialized at build time. To see why
>> org.codehaus.groovy.reflection.stdclasses.ArrayCachedClass got initialized
>> use
>> --trace-class-initialization=org.codehaus.groovy.reflection.stdclasses.ArrayCachedClass
>> org.codehaus.groovy.runtime.dgmimpl.NumberNumberMinus was unintentionally
>> initialized at build time. To see why
>> org.codehaus.groovy.runtime.dgmimpl.NumberNumberMinus got initialized use
>> --trace-class-initialization=org.codehaus.groovy.runtime.dgmimpl.NumberNumberMinus
>> org.codehaus.groovy.reflection.stdclasses.CachedSAMClass was
>> unintentionally initialized at build time. To see why
>> org.codehaus.groovy.reflection.stdclasses.CachedSAMClass got initialized
>> use
>> --trace-class-initialization=org.codehaus.groovy.reflection.stdclasses.CachedSAMClass
>> org.codehaus.groovy.runtime.dgmimpl.NumberNumberPlus was unintentionally
>> initialized at build time. To see why
>> org.codehaus.groovy.runtime.dgmimpl.NumberNumberPlus got initialized use
>> --trace-class-initialization=org.codehaus.groovy.runtime.dgmimpl.NumberNumberPlus
>> org.codehaus.groovy.util.ReferenceType$1 was unintentionally initialized
>> at build time. To see why org.codehaus.groovy.util.ReferenceType$1 got
>> initialized use
>> --trace-class-initialization=org.codehaus.groovy.util.ReferenceType$1
>> org.codehaus.groovy.reflection.CachedClass$4 was unintentionally
>> initialized at build time. To see why
>> org.codehaus.groovy.reflection.CachedClass$4 got initialized use
>> --trace-class-initialization=org.codehaus.groovy.reflection.CachedClass$4
>> groovy.lang.GroovySystem was unintentionally initialized at build time.
>> To see why groovy.lang.GroovySystem got initialized use
>> --trace-class-initialization=groovy.lang.GroovySystem
>> org.codehaus.groovy.vmplugin.VMPluginFactory was unintentionally
>> initialized at build time. To see why
>> org.codehaus.groovy.vmplugin.VMPluginFactory got initialized use
>> --trace-class-initialization=org.codehaus.groovy.vmplugin.VMPluginFactory
>> org.codehaus.groovy.vmplugin.v8.IndyInterface$CallType was
>> unintentionally initialized at build time. To see why
>> org.codehaus.groovy.vmplugin.v8.IndyInterface$CallType got initialized use
>> --trace-class-initialization=org.codehaus.groovy.vmplugin.v8.IndyInterface$CallType
>> org.codehaus.groovy.reflection.ReflectionCache was unintentionally
>> initialized at build time. To see why
>> org.codehaus.groovy.reflection.ReflectionCache got initialized use
>> --trace-class-initialization=org.codehaus.groovy.reflection.ReflectionCache
>> org.codehaus.groovy.util.ReferenceType$4 was unintentionally initialized
>> at build time. To see why org.codehaus.groovy.util.ReferenceType$4 got
>> initialized use
>> --trace-class-initialization=org.codehaus.groovy.util.ReferenceType$4
>> org.codehaus.groovy.runtime.m12n.SimpleExtensionModule was
>> unintentionally initialized at build time. To see why
>> org.codehaus.groovy.runtime.m12n.SimpleExtensionModule got initialized use
>> --trace-class-initialization=org.codehaus.groovy.runtime.m12n.SimpleExtensionModule
>> org.codehaus.groovy.runtime.m12n.MetaInfExtensionModule was
>> unintentionally initialized at build time. To see why
>> org.codehaus.groovy.runtime.m12n.MetaInfExtensionModule got initialized use
>> --trace-class-initialization=org.codehaus.groovy.runtime.m12n.MetaInfExtensionModule
>> org.codehaus.groovy.runtime.dgmimpl.NumberNumberMetaMethod was
>> unintentionally initialized at build time. To see why
>> org.codehaus.groovy.runtime.dgmimpl.NumberNumberMetaMethod got initialized
>> use
>> --trace-class-initialization=org.codehaus.groovy.runtime.dgmimpl.NumberNumberMetaMethod
>> org.codehaus.groovy.runtime.MetaClassHelper was unintentionally
>> initialized at build time. To see why
>> org.codehaus.groovy.runtime.MetaClassHelper got initialized use
>> --trace-class-initialization=org.codehaus.groovy.runtime.MetaClassHelper
>> org.codehaus.groovy.util.ReferenceType$3 was unintentionally initialized
>> at build time. To see why org.codehaus.groovy.util.ReferenceType$3 got
>> initialized use
>> --trace-class-initialization=org.codehaus.groovy.util.ReferenceType$3
>> org.codehaus.groovy.runtime.dgmimpl.arrays.ObjectArrayPutAtMetaMethod was
>> unintentionally initialized at build time. To see why
>> org.codehaus.groovy.runtime.dgmimpl.arrays.ObjectArrayPutAtMetaMethod got
>> initialized use
>> --trace-class-initialization=org.codehaus.groovy.runtime.dgmimpl.arrays.ObjectArrayPutAtMetaMethod
>> org.codehaus.groovy.runtime.dgmimpl.arrays.LongArrayGetAtMetaMethod was
>> unintentionally initialized at build time. To see why
>> org.codehaus.groovy.runtime.dgmimpl.arrays.LongArrayGetAtMetaMethod got
>> initialized use
>> --trace-class-initialization=org.codehaus.groovy.runtime.dgmimpl.arrays.LongArrayGetAtMetaMethod
>> com.sun.beans.util.Cache$Kind$3 was unintentionally initialized at build
>> time. To see why com.sun.beans.util.Cache$Kind$3 got initialized use
>> --trace-class-initialization=com.sun.beans.util.Cache$Kind$3
>> org.codehaus.groovy.reflection.stdclasses.BooleanCachedClass was
>> unintentionally initialized at build time. To see why
>> org.codehaus.groovy.reflection.stdclasses.BooleanCachedClass got
>> initialized use
>> --trace-class-initialization=org.codehaus.groovy.reflection.stdclasses.BooleanCachedClass
>> org.codehaus.groovy.reflection.CachedClass$1 was unintentionally
>> initialized at build time. To see why
>> org.codehaus.groovy.reflection.CachedClass$1 got initialized use
>> --trace-class-initialization=org.codehaus.groovy.reflection.CachedClass$1
>> org.codehaus.groovy.reflection.CachedClass$7 was unintentionally
>> initialized at build time. To see why
>> org.codehaus.groovy.reflection.CachedClass$7 got initialized use
>> --trace-class-initialization=org.codehaus.groovy.reflection.CachedClass$7
>> org.codehaus.groovy.runtime.dgmimpl.arrays.FloatArrayGetAtMetaMethod was
>> unintentionally initialized at build time. To see why
>> org.codehaus.groovy.runtime.dgmimpl.arrays.FloatArrayGetAtMetaMethod got
>> initialized use
>> --trace-class-initialization=org.codehaus.groovy.runtime.dgmimpl.arrays.FloatArrayGetAtMetaMethod
>> org.codehaus.groovy.runtime.dgmimpl.arrays.ArrayPutAtMetaMethod was
>> unintentionally initialized at build time. To see why
>> org.codehaus.groovy.runtime.dgmimpl.arrays.ArrayPutAtMetaMethod got
>> initialized use
>> --trace-class-initialization=org.codehaus.groovy.runtime.dgmimpl.arrays.ArrayPutAtMetaMethod
>> org.codehaus.groovy.reflection.stdclasses.BigDecimalCachedClass was
>> unintentionally initialized at build time. To see why
>> org.codehaus.groovy.reflection.stdclasses.BigDecimalCachedClass got
>> initialized use
>> --trace-class-initialization=org.codehaus.groovy.reflection.stdclasses.BigDecimalCachedClass
>> org.codehaus.groovy.runtime.dgmimpl.arrays.ArrayGetAtMetaMethod was
>> unintentionally initialized at build time. To see why
>> org.codehaus.groovy.runtime.dgmimpl.arrays.ArrayGetAtMetaMethod got
>> initialized use
>> --trace-class-initialization=org.codehaus.groovy.runtime.dgmimpl.arrays.ArrayGetAtMetaMethod
>> org.codehaus.groovy.runtime.dgmimpl.arrays.IntegerArrayPutAtMetaMethod
>> was unintentionally initialized at build time. To see why
>> org.codehaus.groovy.runtime.dgmimpl.arrays.IntegerArrayPutAtMetaMethod got
>> initialized use
>> --trace-class-initialization=org.codehaus.groovy.runtime.dgmimpl.arrays.IntegerArrayPutAtMetaMethod
>> org.codehaus.groovy.runtime.dgmimpl.arrays.BooleanArrayGetAtMetaMethod
>> was unintentionally initialized at build time. To see why
>> org.codehaus.groovy.runtime.dgmimpl.arrays.BooleanArrayGetAtMetaMethod got
>> initialized use
>> --trace-class-initialization=org.codehaus.groovy.runtime.dgmimpl.arrays.BooleanArrayGetAtMetaMethod
>> org.codehaus.groovy.runtime.dgmimpl.arrays.ArrayMetaMethod was
>> unintentionally initialized at build time. To see why
>> org.codehaus.groovy.runtime.dgmimpl.arrays.ArrayMetaMethod got initialized
>> use
>> --trace-class-initialization=org.codehaus.groovy.runtime.dgmimpl.arrays.ArrayMetaMethod
>> org.codehaus.groovy.runtime.DefaultGroovyMethodsSupport was
>> unintentionally initialized at build time. To see why
>> org.codehaus.groovy.runtime.DefaultGroovyMethodsSupport got initialized use
>> --trace-class-initialization=org.codehaus.groovy.runtime.DefaultGroovyMethodsSupport
>> org.codehaus.groovy.vmplugin.v8.Java8 was unintentionally initialized at
>> build time. To see why org.codehaus.groovy.vmplugin.v8.Java8 got
>> initialized use
>> --trace-class-initialization=org.codehaus.groovy.vmplugin.v8.Java8
>> com.sun.beans.introspect.ClassInfo was unintentionally initialized at
>> build time. To see why com.sun.beans.introspect.ClassInfo got initialized
>> use --trace-class-initialization=com.sun.beans.introspect.ClassInfo
>> org.codehaus.groovy.vmplugin.v8.CacheableCallSite was unintentionally
>> initialized at build time. To see why
>> org.codehaus.groovy.vmplugin.v8.CacheableCallSite got initialized use
>> --trace-class-initialization=org.codehaus.groovy.vmplugin.v8.CacheableCallSite
>> org.codehaus.groovy.vmplugin.v16.Java16 was unintentionally initialized
>> at build time. To see why org.codehaus.groovy.vmplugin.v16.Java16 got
>> initialized use
>> --trace-class-initialization=org.codehaus.groovy.vmplugin.v16.Java16
>> org.codehaus.groovy.reflection.CachedClass$5 was unintentionally
>> initialized at build time. To see why
>> org.codehaus.groovy.reflection.CachedClass$5 got initialized use
>> --trace-class-initialization=org.codehaus.groovy.reflection.CachedClass$5
>> org.codehaus.groovy.reflection.stdclasses.StringCachedClass was
>> unintentionally initialized at build time. To see why
>> org.codehaus.groovy.reflection.stdclasses.StringCachedClass got initialized
>> use
>> --trace-class-initialization=org.codehaus.groovy.reflection.stdclasses.StringCachedClass
>> java.beans.Introspector was unintentionally initialized at build time. To
>> see why java.beans.Introspector got initialized use
>> --trace-class-initialization=java.beans.Introspector
>> org.codehaus.groovy.runtime.dgmimpl.arrays.ByteArrayPutAtMetaMethod was
>> unintentionally initialized at build time. To see why
>> org.codehaus.groovy.runtime.dgmimpl.arrays.ByteArrayPutAtMetaMethod got
>> initialized use
>> --trace-class-initialization=org.codehaus.groovy.runtime.dgmimpl.arrays.ByteArrayPutAtMetaMethod
>> com.sun.beans.util.Cache$Kind was unintentionally initialized at build
>> time. To see why com.sun.beans.util.Cache$Kind got initialized use
>> --trace-class-initialization=com.sun.beans.util.Cache$Kind
>> org.codehaus.groovy.runtime.dgmimpl.arrays.DoubleArrayGetAtMetaMethod was
>> unintentionally initialized at build time. To see why
>> org.codehaus.groovy.runtime.dgmimpl.arrays.DoubleArrayGetAtMetaMethod got
>> initialized use
>> --trace-class-initialization=org.codehaus.groovy.runtime.dgmimpl.arrays.DoubleArrayGetAtMetaMethod
>> org.codehaus.groovy.reflection.CachedClass$2 was unintentionally
>> initialized at build time. To see why
>> org.codehaus.groovy.reflection.CachedClass$2 got initialized use
>> --trace-class-initialization=org.codehaus.groovy.reflection.CachedClass$2
>> org.codehaus.groovy.util.ReferenceType was unintentionally initialized at
>> build time. To see why org.codehaus.groovy.util.ReferenceType got
>> initialized use
>> --trace-class-initialization=org.codehaus.groovy.util.ReferenceType
>> org.codehaus.groovy.runtime.dgmimpl.arrays.ByteArrayGetAtMetaMethod was
>> unintentionally initialized at build time. To see why
>> org.codehaus.groovy.runtime.dgmimpl.arrays.ByteArrayGetAtMetaMethod got
>> initialized use
>> --trace-class-initialization=org.codehaus.groovy.runtime.dgmimpl.arrays.ByteArrayGetAtMetaMethod
>> com.sun.beans.util.Cache$Kind$2 was unintentionally initialized at build
>> time. To see why com.sun.beans.util.Cache$Kind$2 got initialized use
>> --trace-class-initialization=com.sun.beans.util.Cache$Kind$2
>> org.codehaus.groovy.reflection.CachedClass$8 was unintentionally
>> initialized at build time. To see why
>> org.codehaus.groovy.reflection.CachedClass$8 got initialized use
>> --trace-class-initialization=org.codehaus.groovy.reflection.CachedClass$8
>> org.codehaus.groovy.reflection.stdclasses.LongCachedClass was
>> unintentionally initialized at build time. To see why
>> org.codehaus.groovy.reflection.stdclasses.LongCachedClass got initialized
>> use
>> --trace-class-initialization=org.codehaus.groovy.reflection.stdclasses.LongCachedClass
>> org.codehaus.groovy.reflection.stdclasses.FloatCachedClass was
>> unintentionally initialized at build time. To see why
>> org.codehaus.groovy.reflection.stdclasses.FloatCachedClass got initialized
>> use
>> --trace-class-initialization=org.codehaus.groovy.reflection.stdclasses.FloatCachedClass
>> org.codehaus.groovy.reflection.ClassInfo was unintentionally initialized
>> at build time. To see why org.codehaus.groovy.reflection.ClassInfo got
>> initialized use
>> --trace-class-initialization=org.codehaus.groovy.reflection.ClassInfo
>> org.codehaus.groovy.reflection.stdclasses.ObjectCachedClass was
>> unintentionally initialized at build time. To see why
>> org.codehaus.groovy.reflection.stdclasses.ObjectCachedClass got initialized
>> use
>> --trace-class-initialization=org.codehaus.groovy.reflection.stdclasses.ObjectCachedClass
>> org.apache.groovy.plugin.GroovyRunnerRegistry was unintentionally
>> initialized at build time. To see why
>> org.apache.groovy.plugin.GroovyRunnerRegistry got initialized use
>> --trace-class-initialization=org.apache.groovy.plugin.GroovyRunnerRegistry
>> org.codehaus.groovy.vmplugin.v10.Java10 was unintentionally initialized
>> at build time. To see why org.codehaus.groovy.vmplugin.v10.Java10 got
>> initialized use
>> --trace-class-initialization=org.codehaus.groovy.vmplugin.v10.Java10
>> org.codehaus.groovy.runtime.dgmimpl.arrays.CharacterArrayPutAtMetaMethod
>> was unintentionally initialized at build time. To see why
>> org.codehaus.groovy.runtime.dgmimpl.arrays.CharacterArrayPutAtMetaMethod
>> got initialized use
>> --trace-class-initialization=org.codehaus.groovy.runtime.dgmimpl.arrays.CharacterArrayPutAtMetaMethod
>> org.codehaus.groovy.runtime.dgmimpl.arrays.BooleanArrayPutAtMetaMethod
>> was unintentionally initialized at build time. To see why
>> org.codehaus.groovy.runtime.dgmimpl.arrays.BooleanArrayPutAtMetaMethod got
>> initialized use
>> --trace-class-initialization=org.codehaus.groovy.runtime.dgmimpl.arrays.BooleanArrayPutAtMetaMethod
>> org.codehaus.groovy.runtime.dgmimpl.arrays.IntegerArrayGetAtMetaMethod
>> was unintentionally initialized at build time. To see why
>> org.codehaus.groovy.runtime.dgmimpl.arrays.IntegerArrayGetAtMetaMethod got
>> initialized use
>> --trace-class-initialization=org.codehaus.groovy.runtime.dgmimpl.arrays.IntegerArrayGetAtMetaMethod
>> To see how the classes got initialized, use
>> --trace-class-initialization=org.codehaus.groovy.reflection.CachedClass$3,org.codehaus.groovy.runtime.dgmimpl.NumberNumberMultiply,org.codehaus.groovy.runtime.DefaultGroovyMethods,org.codehaus.groovy.util.ReferenceBundle,org.codehaus.groovy.runtime.dgmimpl.arrays.DoubleArrayPutAtMetaMethod,org.codehaus.groovy.runtime.dgmimpl.arrays.ObjectArrayGetAtMetaMethod,org.codehaus.groovy.vmplugin.v8.IndyInterface,org.codehaus.groovy.reflection.stdclasses.IntegerCachedClass,org.codehaus.groovy.runtime.GroovyCategorySupport,org.codehaus.groovy.reflection.CachedClass,org.codehaus.groovy.reflection.stdclasses.CachedClosureClass,org.codehaus.groovy.reflection.stdclasses.NumberCachedClass,org.codehaus.groovy.reflection.stdclasses.BigIntegerCachedClass,org.codehaus.groovy.reflection.ClassInfo$LazyClassLoaderRef,org.codehaus.groovy.reflection.ReflectionUtils,org.codehaus.groovy.reflection.GroovyClassValueFactory,org.codehaus.groovy.reflection.CachedClass$6,org.codehaus.groovy.vmplugin.v9.Java9,org.codehaus.groovy.runtime.dgmimpl.arrays.ShortArrayGetAtMetaMethod,org.codehaus.groovy.runtime.dgmimpl.arrays.CharacterArrayGetAtMetaMethod,org.codehaus.groovy.util.LazyReference,org.codehaus.groovy.runtime.dgmimpl.arrays.ShortArrayPutAtMetaMethod,org.codehaus.groovy.runtime.dgmimpl.arrays.LongArrayPutAtMetaMethod,org.codehaus.groovy.reflection.stdclasses.CharacterCachedClass,org.codehaus.groovy.reflection.stdclasses.DoubleCachedClass,org.codehaus.groovy.reflection.ClassInfo$LazyCachedClassRef,org.codehaus.groovy.runtime.dgmimpl.NumberNumberDiv,org.codehaus.groovy.util.ReferenceType$2,groovy.lang.MetaClassImpl,org.codehaus.groovy.runtime.dgmimpl.arrays.FloatArrayPutAtMetaMethod,com.sun.beans.util.Cache$Kind$1,org.codehaus.groovy.reflection.stdclasses.ArrayCachedClass,org.codehaus.groovy.runtime.dgmimpl.NumberNumberMinus,org.codehaus.groovy.reflection.stdclasses.CachedSAMClass,org.codehaus.groovy.runtime.dgmimpl.NumberNumberPlus,org.codehaus.groovy.util.ReferenceType$1,org.codehaus.groovy.reflection.CachedClass$4,groovy.lang.GroovySystem,org.codehaus.groovy.vmplugin.VMPluginFactory,org.codehaus.groovy.vmplugin.v8.IndyInterface$CallType,org.codehaus.groovy.reflection.ReflectionCache,org.codehaus.groovy.util.ReferenceType$4,org.codehaus.groovy.runtime.m12n.SimpleExtensionModule,org.codehaus.groovy.runtime.m12n.MetaInfExtensionModule,org.codehaus.groovy.runtime.dgmimpl.NumberNumberMetaMethod,org.codehaus.groovy.runtime.MetaClassHelper,org.codehaus.groovy.util.ReferenceType$3,org.codehaus.groovy.runtime.dgmimpl.arrays.ObjectArrayPutAtMetaMethod,org.codehaus.groovy.runtime.dgmimpl.arrays.LongArrayGetAtMetaMethod,com.sun.beans.util.Cache$Kind$3,org.codehaus.groovy.reflection.stdclasses.BooleanCachedClass,org.codehaus.groovy.reflection.CachedClass$1,org.codehaus.groovy.reflection.CachedClass$7,org.codehaus.groovy.runtime.dgmimpl.arrays.FloatArrayGetAtMetaMethod,org.codehaus.groovy.runtime.dgmimpl.arrays.ArrayPutAtMetaMethod,org.codehaus.groovy.reflection.stdclasses.BigDecimalCachedClass,org.codehaus.groovy.runtime.dgmimpl.arrays.ArrayGetAtMetaMethod,org.codehaus.groovy.runtime.dgmimpl.arrays.IntegerArrayPutAtMetaMethod,org.codehaus.groovy.runtime.dgmimpl.arrays.BooleanArrayGetAtMetaMethod,org.codehaus.groovy.runtime.dgmimpl.arrays.ArrayMetaMethod,org.codehaus.groovy.runtime.DefaultGroovyMethodsSupport,org.codehaus.groovy.vmplugin.v8.Java8,com.sun.beans.introspect.ClassInfo,org.codehaus.groovy.vmplugin.v8.CacheableCallSite,org.codehaus.groovy.vmplugin.v16.Java16,org.codehaus.groovy.reflection.CachedClass$5,org.codehaus.groovy.reflection.stdclasses.StringCachedClass,java.beans.Introspector,org.codehaus.groovy.runtime.dgmimpl.arrays.ByteArrayPutAtMetaMethod,com.sun.beans.util.Cache$Kind,org.codehaus.groovy.runtime.dgmimpl.arrays.DoubleArrayGetAtMetaMethod,org.codehaus.groovy.reflection.CachedClass$2,org.codehaus.groovy.util.ReferenceType,org.codehaus.groovy.runtime.dgmimpl.arrays.ByteArrayGetAtMetaMethod,com.sun.beans.util.Cache$Kind$2,org.codehaus.groovy.reflection.CachedClass$8,org.codehaus.groovy.reflection.stdclasses.LongCachedClass,org.codehaus.groovy.reflection.stdclasses.FloatCachedClass,org.codehaus.groovy.reflection.ClassInfo,org.codehaus.groovy.reflection.stdclasses.ObjectCachedClass,org.apache.groovy.plugin.GroovyRunnerRegistry,org.codehaus.groovy.vmplugin.v10.Java10,org.codehaus.groovy.runtime.dgmimpl.arrays.CharacterArrayPutAtMetaMethod,org.codehaus.groovy.runtime.dgmimpl.arrays.BooleanArrayPutAtMetaMethod,org.codehaus.groovy.runtime.dgmimpl.arrays.IntegerArrayGetAtMetaMethod
>>
>> I've watched some Groovy on GraalVM tutorials and it seems to be working,
>> but there was no AWT / Swing.
>> Does it mean that Swing + GraalVM is not a valid option? Or is it because
>> of Groovy + Swing?
>>
>>
>>
>> ------------------------------
>> *De :* Gilles DUBOSCQ <gilles.m.duboscq at oracle.com>
>> *Envoyé :* lundi 16 octobre 2023 20:10
>> *À :* Eric Samson <erix.samson at gmail.com>
>> *Cc :* graalvm-users at oss.oracle.com <graalvm-users at oss.oracle.com>
>> *Objet :* Re: [External] : [graalvm-users] java.lang.Thread.sleep()
>> supported in GraalVM?
>>
>> It looks like the issue is not with Thread.sleep but Swing/AWT on Windows
>> (specifically sun.awt.shell.Win32ShellFolderManager2$ComInvoker).
>>
>> I think it's not a good idea to use --initialize-at-build-time, you're
>> likely to get into a lot of such corner cases. In general only code that
>> has been designed for it or has explicit support in native-image works well
>> under --initialize-at-build-time. I would recommend to use
>> --initialize-at-build-time only on specific packages or type for which you
>> know there is a real benefit.
>> If you really want to initialize everything at build time, maybe you can
>> try to use --initialize-at-run-time=sun.awt.shell.Win32ShellFolder2
>>
>>  Gilles
>> ------------------------------
>> *From:* Eric Samson <erix.samson at gmail.com>
>> *Sent:* Monday, 16 October 2023 19:10
>> *To:* Gilles DUBOSCQ <gilles.m.duboscq at oracle.com>
>> *Cc:* graalvm-users at oss.oracle.com <graalvm-users at oss.oracle.com>
>> *Subject:* Re: [External] : [graalvm-users] java.lang.Thread.sleep()
>> supported in GraalVM?
>>
>> Hi Gilles,
>>
>> Thanks for the quick reply.
>> Here is the error message:
>>
>> *Error*: Detected a started Thread in the image heap. Threads running in
>> the image generator are no longer running at image runtime.  To see how
>> this object got instantiated use
>> --trace-object-instantiation=java.lang.Thread. The object was probably
>> created by a class initializer and is reachable from a static field. You
>> can request class initialization at image runtime by using the option
>> --initialize-at-run-time=<class-name>. Or you can write your own
>> initialization methods and call them explicitly from your main entry point.
>>
>> I've tried the option --initialize-at-runtime=java.lang.Thread, without
>> success.
>>
>> *StackTrace:*
>> Trace: Object was reached by
>>   reading field java.util.concurrent.ThreadPoolExecutor$Worker.thread of
>> constant
>>     java.util.concurrent.ThreadPoolExecutor$Worker at 63a4cfd:
>> java.util.concurrent.ThreadPoolExecutor$Worker at 63a4cfd[State = 1, empty
>> queue]
>>   reading field java.util.HashMap$Node.key of constant
>>     java.util.HashMap$Node at 53798803:
>> java.util.concurrent.ThreadPoolExecutor$Worker at 63a4cfd[State = 1, empty
>> queue]=j...
>>   indexing into array java.util.HashMap$Node[]@2f2400d:
>> [Ljava.util.HashMap$Node;@2f2400d
>>   reading field java.util.HashMap.table of constant
>>     java.util.HashMap at 1ac46e3c:
>> {java.util.concurrent.ThreadPoolExecutor$Worker at 63a4cfd[State = 1, empty
>> queue]=...
>>   reading field java.util.HashSet.map of constant
>>     java.util.HashSet at 74b3b357:
>> [java.util.concurrent.ThreadPoolExecutor$Worker at 63a4cfd[State = 1, empty
>> queue]]
>>   reading field java.util.concurrent.ThreadPoolExecutor.workers of
>> constant
>>     sun.awt.shell.Win32ShellFolderManager2$ComInvoker at 7f227548:
>> sun.awt.shell.Win32ShellFolderManager2$ComInvoker at 7f227548[Running, pool
>> size = ...
>>   scanning root sun.awt.shell.Win32ShellFolderManager2$ComInvoker at 7f227548:
>> sun.awt.shell.Win32ShellFolderManager2$ComInvoker at 7f227548[Running, pool
>> size = ... embedded in
>>     sun.awt.shell.ShellFolder.invoke(ShellFolder.java:537)
>>   parsing method sun.awt.shell.ShellFolder.invoke(ShellFolder.java:537)
>> reachable via the parsing context
>>     at sun.awt.shell.Win32ShellFolder2.<init>(Win32ShellFolder2.java:292)
>>     at
>> com.oracle.svm.core.code.FactoryMethodHolder.Win32ShellFolder2_constructor_79b7324abf2daa84de416777f746e499d5310ac3(generated:0)
>>     at
>> sun.awt.shell.Win32ShellFolderManager2.getDesktop(Win32ShellFolderManager2.java:171)
>>     at
>> sun.awt.shell.Win32ShellFolderManager2.isFileSystemRoot(Win32ShellFolderManager2.java:504)
>>     at
>> javax.swing.filechooser.FileSystemView.isFileSystemRoot(FileSystemView.java:423)
>>     at
>> javax.swing.filechooser.FileSystemView.getFiles(FileSystemView.java:581)
>>     at
>> javax.swing.filechooser.FileSystemView.isParent(FileSystemView.java:338)
>>     at javax.swing.JFileChooser.setSelectedFile(JFileChooser.java:513)
>>     at javax.swing.JFileChooser.setFileFilter(JFileChooser.java:1472)
>>     at javax.swing.JFileChooser.setup(JFileChooser.java:398)
>>     at javax.swing.JFileChooser.<init>(JFileChooser.java:362)
>>     at
>> com.oracle.svm.core.code.FactoryMethodHolder.JFileChooser_constructor_0980039f483e9a48b2389d8a4a1a9cd473a16dbd(generated:0)
>>     at
>> javax.swing.text.html.FormView$BrowseFileAction.actionPerformed(FormView.java:968)
>>     at java.awt.MenuItem.processActionEvent(MenuItem.java:692)
>>     at java.awt.MenuItem.processEvent(MenuItem.java:651)
>>     at java.awt.MenuComponent.dispatchEventImpl(MenuComponent.java:379)
>>     at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:776)
>>     at java.awt.EventQueue$4.run(EventQueue.java:722)
>>     at java.awt.EventQueue$4.run(EventQueue.java:716)
>>     at
>> com.oracle.svm.core.jdk.Target_java_security_AccessController.executePrivileged(SecuritySubstitutions.java:171)
>>     at sun.font.SunFontManager.<init>(SunFontManager.java:457)
>>     at sun.awt.Win32FontManager.<init>(Win32FontManager.java:88)
>>     at
>> com.oracle.svm.core.code.FactoryMethodHolder.Win32FontManager_constructor_002b6104bcda27602265e5cec50c16a5ebc813af(generated:0)
>>     at static root method.(Unknown Source)
>>
>> *My Groovy code snippet:*
>>
>> @groovy.transform.CompileStatic
>> class App {
>>     static void main(String[] args) {
>>     // some very simple Swing UI init here
>>     while (true) {
>>             time = LocalTime.now()
>>             label.text = " " + time.format("HH:mm:ss")
>>             Thread.sleep(1000)
>>         }
>>  }
>>
>> *My native-compile command line:*
>> native-image --report-unsupported-elements-at-runtime
>> --initialize-at-build-time --trace-class-initialization=java.lang.Thread
>> --no-fallback -H:ConfigurationFileDirectories=conf/ -cp
>> ".;%GROOVY_HOME%lib\groovy-4.0.9.jar;%GROOVY_HOME%lib\groovy-datetime-4.0.9.jar"
>> displaytime.App
>>
>> *My native-agent command line (works well):*
>> java -agentlib:native-image-agent=config-output-dir=conf/ displaytime.App
>>
>> *::* Cordialement/Best regards, Erix
>>
>>
>> Le lun. 16 oct. 2023 à 18:48, Gilles DUBOSCQ <gilles.m.duboscq at oracle.com>
>> a écrit :
>>
>> Hi Eric,
>> Yes Thread.sleep() should work in GraalVM native-image.
>> It would help to know what kind of error you're seeing exactly.
>>  Gilles
>> ------------------------------
>> *From:* Eric Samson via GraalVM-Users <graalvm-users at oss.oracle.com>
>> *Sent:* Monday, 16 October 2023 18:38
>> *To:* graalvm-users at oss.oracle.com <graalvm-users at oss.oracle.com>
>> *Subject:* [External] : [graalvm-users] java.lang.Thread.sleep()
>> supported in GraalVM?
>>
>> Hi everyone,
>>
>> I'm totally new to GraalVM.
>> I've set up the whole environment for Windows this morning.
>>
>> I'm now trying to natively compile a Groovy app (with neither dynamic nor
>> meta programming).
>> I've been able to compile it and use the native-image-agent to generate
>> the /conf files.
>>
>> Now I'm trying to generate the executable and I get an error message due
>> to the fact I'm using Thread.sleep(x) in my main loop.
>>
>> Sleep is a static method of the Thread class. I understand there must be
>> some kind of conflicts between the class being initialized at build-time or
>> runtime. But I'm not sure how to fix it. I've spent a lot of time in the
>> GraalVM documentation and several Web sites (stackOverflow, etc.) but could
>> not find a good example of how to use Thread.sleep in GraalVM.
>>
>> Sorry for the noob question. Any hint would be greatly appreciated.
>> Thanks in advance.
>> Best regards, Erix.
>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://oss.oracle.com/pipermail/graalvm-users/attachments/20231017/151f2357/attachment-0001.html>


More information about the GraalVM-Users mailing list