tuxguitar
tuxguitar copied to clipboard
MacOS Cocoa plugin shows error with SWT 4.15 and above
When upgrading SWT to version 4.15 or higher, the MacOS Cocoa integration plugin shows the following error at startup:
MacOS14 00-Binary_Packages % ./tuxguitar-2024-02-22-snapshot-macosx-swt-cocoa-x86_64.app/Contents/MacOS/tuxguitar.sh
org.herac.tuxguitar.util.plugin.TGPluginException: org.eclipse.swt.internal.cocoa.NSWindow.standardWindowButton(long)
at org.herac.tuxguitar.cocoa.toolbar.MacToolbarPlugin.connect(MacToolbarPlugin.java:28)
at org.herac.tuxguitar.util.plugin.TGPluginManager.connectPlugin(TGPluginManager.java:88)
at org.herac.tuxguitar.util.plugin.TGPluginManager.connectEnabled(TGPluginManager.java:65)
at org.herac.tuxguitar.app.TuxGuitar.startUIContext(TuxGuitar.java:141)
at org.herac.tuxguitar.app.TuxGuitar.access$100(TuxGuitar.java:69)
at org.herac.tuxguitar.app.TuxGuitar$1$1.run(TuxGuitar.java:124)
at org.herac.tuxguitar.app.synchronizer.TGSynchronizerControllerImpl$1$1.run(TGSynchronizerControllerImpl.java:29)
at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40)
at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185)
at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4262)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3885)
at org.herac.tuxguitar.ui.swt.SWTApplication.start(SWTApplication.java:64)
at org.herac.tuxguitar.app.TuxGuitar.createUIContext(TuxGuitar.java:117)
at org.herac.tuxguitar.app.TuxGuitar.createApplication(TuxGuitar.java:102)
at org.herac.tuxguitar.app.TGMainSingleton.launchTuxGuitar(TGMainSingleton.java:57)
at org.herac.tuxguitar.app.TGMainSingleton.launchSingleton(TGMainSingleton.java:45)
at org.herac.tuxguitar.app.TGMainSingleton.main(TGMainSingleton.java:35)
Caused by: java.lang.NoSuchMethodException: org.eclipse.swt.internal.cocoa.NSWindow.standardWindowButton(long)
at java.base/java.lang.Class.getMethod(Class.java:2395)
at org.herac.tuxguitar.cocoa.TGCocoa.invokeMethod(TGCocoa.java:118)
at org.herac.tuxguitar.cocoa.TGCocoa.getStandardWindowButton(TGCocoa.java:66)
at org.herac.tuxguitar.cocoa.toolbar.MacToolbar.init(MacToolbar.java:59)
at org.herac.tuxguitar.cocoa.toolbar.MacToolbarPlugin.connect(MacToolbarPlugin.java:25)
... 16 more
The error is caused by this change from SWT 4.14 to 4.15:
- https://bugs.eclipse.org/bugs/show_bug.cgi?id=547194
- https://github.com/eclipse-platform/eclipse.platform.swt/commit/50e3251a674a8b4a7b3ac9cdc3f764ea7d1ae30a#diff-9427e335ac226d6bfcc5e9ebc41b8d49874971ba4f4a057b083e060358d34396L358
This bug currently prevents the use of newer versions of SWT on MacOS.
The warning disappears if you simply comment out the following lines:
diff --git a/desktop/TuxGuitar-cocoa-integration-swt/src/org/herac/tuxguitar/cocoa/TGCocoa.java b/desktop/TuxGuitar-cocoa-integration-swt/src/org/herac/tuxguitar/cocoa/TGCocoa.java
index 45a89266..0bd34ba5 100644
--- a/desktop/TuxGuitar-cocoa-integration-swt/src/org/herac/tuxguitar/cocoa/TGCocoa.java
+++ b/desktop/TuxGuitar-cocoa-integration-swt/src/org/herac/tuxguitar/cocoa/TGCocoa.java
@@ -61,10 +61,11 @@ public class TGCocoa {
public static final NSMenuItem getMenuItemAtIndex(NSMenu menu, long index) throws Throwable{
return (NSMenuItem)invokeMethod(NSMenu.class, menu, "itemAtIndex", new Object[] { osType(index) });
}
-
- public static final NSButton getStandardWindowButton(NSWindow nsWindow, long index) throws Throwable{
- return (NSButton)invokeMethod(NSWindow.class, nsWindow, "standardWindowButton", new Object[] { osType(index) });
- }
+
+ // Not compatible with SWT 4.15 and above - see https://github.com/helge17/tuxguitar/issues/355
+ // public static final NSButton getStandardWindowButton(NSWindow nsWindow, long index) throws Throwable{
+ // return (NSButton)invokeMethod(NSWindow.class, nsWindow, "standardWindowButton", new Object[] { osType(index) });
+ // }
public static final String getNSStringValue( long pointer ) throws Throwable {
NSString nsString = new NSString();
diff --git a/desktop/TuxGuitar-cocoa-integration-swt/src/org/herac/tuxguitar/cocoa/toolbar/MacToolbar.java b/desktop/TuxGuitar-cocoa-integration-swt/src/org/herac/tuxguitar/cocoa/toolbar/MacToolbar.java
index 5bfc7cd4..d37bfaca 100644
--- a/desktop/TuxGuitar-cocoa-integration-swt/src/org/herac/tuxguitar/cocoa/toolbar/MacToolbar.java
+++ b/desktop/TuxGuitar-cocoa-integration-swt/src/org/herac/tuxguitar/cocoa/toolbar/MacToolbar.java
@@ -55,12 +55,13 @@ public class MacToolbar {
nsWindow.setToolbar(dummyBar);
dummyBar.release();
nsWindow.setShowsToolbarButton(true);
-
- NSButton toolbarButton = TGCocoa.getStandardWindowButton(nsWindow, NSWindowToolbarButton);
- if (toolbarButton != null) {
- toolbarButton.setTarget( delegate );
- TGCocoa.setControlAction( toolbarButton , sel_toolbarButtonClicked_ );
- }
+
+ // Not compatible with SWT 4.15 and above - see https://github.com/helge17/tuxguitar/issues/355
+ // NSButton toolbarButton = TGCocoa.getStandardWindowButton(nsWindow, NSWindowToolbarButton);
+ // if (toolbarButton != null) {
+ // toolbarButton.setTarget( delegate );
+ // TGCocoa.setControlAction( toolbarButton , sel_toolbarButtonClicked_ );
+ // }
}
}
I have not noticed any negative side effects of this patch. So until someone finds the time to rework this part of the code, I would like to commit this patch and update SWT to 4.26.