From: Brian P. Hinz Date: Sat, 29 Jan 2022 20:56:34 +0000 (-0500) Subject: Fix for reflection warnings for strongly encapsulated Desktop methods in Java > 9 X-Git-Tag: v1.12.90~51 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=969f9272206bd895cd30d048a8ec7d5bd45d49fd;p=tigervnc.git Fix for reflection warnings for strongly encapsulated Desktop methods in Java > 9 --- diff --git a/java/com/tigervnc/vncviewer/VncViewer.java b/java/com/tigervnc/vncviewer/VncViewer.java index 9593469e..46c67b0a 100644 --- a/java/com/tigervnc/vncviewer/VncViewer.java +++ b/java/com/tigervnc/vncviewer/VncViewer.java @@ -88,14 +88,24 @@ public class VncViewer implements Runnable { public static void setLookAndFeel() { try { if (os.startsWith("mac os x")) { - Class appClass = Class.forName("com.apple.eawt.Application"); + String appClassName = new String("com.apple.eawt.Application"); + String appMethodName = new String("getApplication"); + String setIconMethodName = new String("setDockIconImage"); + // JEP-272. Platform-specific Desktop Features are strongly encapsulated + // in JRE 9 & above, but the API features needed aren't in JRE 8. + if (Float.parseFloat(System.getProperty("java.specification.version")) > 1.8) { + appClassName = new String("java.awt.Taskbar"); + appMethodName = new String("getTaskbar"); + setIconMethodName = new String("setIconImage"); + } + Class appClass = Class.forName(appClassName); Method getApplication = - appClass.getMethod("getApplication", (Class[])null); + appClass.getMethod(appMethodName, (Class[])null); Object app = getApplication.invoke(appClass); Class paramTypes[] = new Class[1]; paramTypes[0] = Image.class; - Method setDockIconImage = - appClass.getMethod("setDockIconImage", paramTypes); + Method setDockIconImage = + appClass.getMethod(setIconMethodName, paramTypes); setDockIconImage.invoke(app, VncViewer.logoImage); } // Use Nimbus LookAndFeel if it's available, otherwise fallback