Question
STM32CubeMX crashes on launch with OpenJDK16
I recently upgraded from OpenJDK15 to 16 on my machine and noticed that STM32CubeMX now crashes at launch. The splashscreen shows up, but the main window never appears.
Here's a slightly abbreviated output:
$ java -jar STM32CubeMX
log4j user configuration file not found: /home/[...]/.stm32cubemx/log4j.properties
Configure log4j with default settings from jar:file:/opt/STM32CubeMX/STM32CubeMX.exe!/log4j/log4j.stm32cubemx.properties
2021-04-25 22:46:19,141 [INFO] MicroXplorer:76 - [MX] MX Start
2021-04-25 22:46:19,143 [INFO] MicroXplorer:564 - Detected Java Version = 16
[...]
2021-04-25 22:46:20,022 [INFO] PluginManage:178 - Search for loadable plugins [exclusion list=, ]
2021-04-25 22:46:20,024 [INFO] PluginManage:292 - Check plugin analytics
Exception in thread "AWT-EventQueue-0" java.lang.ExceptionInInitializerError
at com.thoughtworks.xstream.XStream.setupConverters(XStream.java:990)
at com.thoughtworks.xstream.XStream.<init>(XStream.java:593)
at com.thoughtworks.xstream.XStream.<init>(XStream.java:515)
at com.thoughtworks.xstream.XStream.<init>(XStream.java:484)
at com.thoughtworks.xstream.XStream.<init>(XStream.java:430)
at com.thoughtworks.xstream.XStream.<init>(XStream.java:397)
at com.st.library.rawvaluescontainer.FilesUtils.<clinit>(FilesUtils.java:41)
at com.st.library.analyticscore.AnalyticsContext.<init>(AnalyticsContext.java:167)
at com.st.library.dynamicproxy.AnalyticsInvocationHandler.<init>(AnalyticsInvocationHandler.java:36)
at com.st.library.builder.AnalyticsBuilder.getAnalytics(AnalyticsBuilder.java:33)
at com.st.library.analyticscore.AnalyticsAPI.initialize(AnalyticsAPI.java:132)
at com.st.microxplorer.plugins.analytics.AnalyticsPlugin.<init>(AnalyticsPlugin.java:165)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:78)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
at java.base/java.lang.reflect.ReflectAccess.newInstance(ReflectAccess.java:128)
at java.base/jdk.internal.reflect.ReflectionFactory.newInstance(ReflectionFactory.java:350)
at java.base/java.lang.Class.newInstance(Class.java:642)
at com.st.microxplorer.plugin.PluginManage.loadPluginJar(PluginManage.java:335)
at com.st.microxplorer.plugin.PluginManage.PluginSearch(PluginManage.java:206)
at com.st.microxplorer.plugin.PluginManage.PluginDiscovery(PluginManage.java:49)
at com.st.microxplorer.maingui.MainPanel.initialization(MainPanel.java:236)
at com.st.microxplorer.maingui.MainFrame.initialization(MainFrame.java:149)
at com.st.microxplorer.maingui.MicroXplorer.run(MicroXplorer.java:226)
at com.st.microxplorer.maingui.STM32CubeMX.run(STM32CubeMX.java:25)
at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:316)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:770)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:740)
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make field private final java.util.Comparator java.util.TreeMap.comparator accessible: module java.base does not "opens java.util" to unnamed module @227132a6
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:357)
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297)
at java.base/java.lang.reflect.Field.checkCanSetAccessible(Field.java:177)
at java.base/java.lang.reflect.Field.setAccessible(Field.java:171)
at com.thoughtworks.xstream.core.util.Fields.locate(Fields.java:40)
at com.thoughtworks.xstream.converters.collections.TreeMapConverter.<clinit>(TreeMapConverter.java:50)
... 39 moreThis seems to be an issue with an outdated version of XStream, see https://github.com/x-stream/xstream/issues/101#issuecomment-722701986
