Skip to content

Commit

Permalink
Fix for reflection warnings for strongly encapsulated Desktop methods…
Browse files Browse the repository at this point in the history
… in Java > 9
  • Loading branch information
bphinz committed Jan 29, 2022
1 parent 7393e2c commit 969f927
Showing 1 changed file with 14 additions and 4 deletions.
18 changes: 14 additions & 4 deletions java/com/tigervnc/vncviewer/VncViewer.java
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 969f927

Please sign in to comment.