[Cocoa][macOS] NPE error when initialize GLCanvas.
I had this issue trying to use SWT with lwjgl on apple silicon.
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "org.eclipse.swt.internal.cocoa.NSGraphicsContext.saveGraphicsState()" because "context" is null at org.eclipse.swt.widgets.Widget.drawRect(Widget.java:764) at org.eclipse.swt.widgets.Canvas.drawRect(Canvas.java:170) at org.eclipse.swt.widgets.Display.windowProc(Display.java:6248) at org.eclipse.swt.internal.cocoa.OS.objc_msgSendSuper(Native Method) at org.eclipse.swt.widgets.Display.applicationNextEventMatchingMask(Display.java:5526) at org.eclipse.swt.widgets.Display.applicationProc(Display.java:5926) at org.eclipse.swt.internal.cocoa.OS.objc_msgSend(Native Method) at org.eclipse.swt.internal.cocoa.NSApplication.nextEventMatchingMask(NSApplication.java:92) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3960) at org.eclipse.swt.snippets.Snippet195.main(Snippet195.java:126)
Environment:
macOS Monterey 12.4 M1 Apple Silicon
Java:
openjdk version "17" 2021-09-14 LTS OpenJDK Runtime Environment Zulu17.28+13-CA (build 17+35-LTS) OpenJDK 64-Bit Server VM Zulu17.28+13-CA (build 17+35-LTS, mixed mode, sharing)
SWT:
SWT-OS: macosx SWT-WS: cocoa SWT-Arch: aarch64 Implementation-Version: 3.120.0 Eclipse-Version: 4.24
This issue is easy to reproduce using Snippet195 provided by Using OpenGL in SWT Applications, it looks like exist in eclipse bugs list for a long time. See details in https://bugs.eclipse.org/bugs/show_bug.cgi?id=570649
There is a workaround: Replace line 763 in org.eclipse.swt.widgets.Widget.drawRect
NSGraphicsContext context = NSGraphicsContext.currentContext();
to
NSGraphicsContext context = new NSGraphicsContext();
But I don't know what side effects it will bring.
Is this issue related to https://github.com/eclipse-platform/eclipse.platform.swt/issues/806. On Mac, rendering occurs 2 or 3 times during mouse hovering and then suddenly throws an NPE as the context turns null.