2012-05-15 2 views
5

Alle Schwingen/NetBeans-basierte Java-GUI-Anwendungen scheinen die gleiche WM_CLASS Wert zu haben:Wie ändert man den WM_CLASS-Wert in einer Java-GUI-Anwendung, die auf Swing oder NetBeans Platform basiert?

WM_CLASS(STRING) = "sun-awt-X11-XFramePeer", "java-lang-Thread" 

Dieser Parameter durch die Ausgabe von xprop Befehl und zeigt auf das Fenster betrachtet werden kann. Der praktische Zweck der Anpassung ist es, Mac-ähnliche Docks (AWN, und vielleicht Ubuntus Unity) die Anwendungsfenster unterscheiden zu lassen und sie unter dem angehefteten Launcher-Symbol der Anwendung zu gruppieren. Damit dies funktioniert StartupWMClass Parameter ist entsprechend in der .application Datei in oder /usr/share/applications festgelegt werden. Es erübrigt sich zu sagen, dass AWN (und Analoga) verwirrt werden, falls mehr als eine Anwendung dieselbe Zeichenkette für WM_CLASS verwendet.

+3

Siehe auch [Bug-ID: 6528430] (http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6528430). – trashgod

+0

Sieht so aus, als wollten sie sich nicht damit beeilen ... :-(Ich hoffe, dass moderne Fensterverwaltungssysteme von Gnome 3, Unity und vielleicht Windows 7 dazu führen werden, dass Oracle aufwacht. Leider scheint es so, als hätten sie gewählt eine andere, Unity-spezifische Art der Integration mit Unity – Ivan

+0

Übrigens, "Bug ID: 6528430" scheint ein Java-6-Problem zu sein.Warum nicht dasselbe für Java 7 und 8 zu speichern? Ich bezweifle, dass sie jemals solche hinzufügen werden eine Funktion zu einer älteren Java-Version scheint die Chance viel besser mit in-Entwicklung blading-edge wie Java 8. – Ivan

Antwort

2

This blog post das Feld in Toolkit gefunden, das es steuert, mit dem Namen awtAppClassName. Es schlägt mit Reflexion, ihn zu ändern:

Toolkit xToolkit = Toolkit.getDefaultToolkit(); 
java.lang.reflect.Field awtAppClassNameField = xToolkit.getClass().getDeclaredField("awtAppClassName"); 
awtAppClassNameField.setAccessible(true); 
awtAppClassNameField.set(xToolkit, applicationName); 
Verwandte Themen