dyorgio / macos-tray-icon-fixer

Fix appearance of Java TrayIcon on Mojave, Catalina and BigSur
MIT License
5 stars 2 forks source link

Does not work on OpenJDK16 #9

Closed tresf closed 3 years ago

tresf commented 3 years ago

When running the project against OpenJDK16, it does not work. Investigation points to this line.

https://github.com/dyorgio/macos-tray-icon-fixer/blob/25c2b7e3fe012be1e34eb33c3ccca92aaf5616d4/src/main/java/dyorgio/runtime/macos/trayicon/fixer/MacOSTrayIconFixer.java#L90

 java.lang.reflect.InaccessibleObjectException: Unable to make field protected volatile long sun.lwawt.macosx.CFRetainedResource.ptr accessible: module java.desktop does not "opens sun.lwawt.macosx" to unnamed module @e50a6f6
    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)
        [...]
dyorgio commented 3 years ago

Hi @tresf, did you include --add-opens java.desktop/sun.lwawt.macosx=ALL-UNNAMED as jvm parameter?

It is necessary to allow reflection on this protected field.

tresf commented 3 years ago

@dyorgio that got me further.

I needed the following for it to work:

--add-opens java.desktop/sun.lwawt.macosx=ALL-UNNAMED
--add-opens java.desktop/java.awt=ALL-UNNAMED

... or else:

java.lang.reflect.InaccessibleObjectException: Unable to make field private transient java.awt.peer.TrayIconPeer java.awt.TrayIcon.peer accessible: module java.desktop does not "opens java.awt" to unnamed module @2b546384
    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)