2012-05-15 20 views
5

Tutti/NetBeans applicazioni basate su Java GUI swing sembrano avere lo stesso valore di WM_CLASS:Come modificare il valore WM_CLASS in un'applicazione GUI Java basata su piattaforma Swing o NetBeans?

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

Questo parametro può essere visualizzato mediante l'emissione di xprop comando e indicando la finestra. Lo scopo pratico della personalizzazione è di lasciare che i dock di tipo Mac (AWN, ad esempio (e, forse, Unity di Ubuntu)) distinguano le finestre dell'applicazione e le raggruppino sotto l'icona di avvio appuntato dell'applicazione. Affinché ciò funzioni, il parametro StartupWMClass deve essere impostato di conseguenza nel file .application in ~/.local/share/applications o /usr/share/applications. Inutile dire che AWN (e gli analoghi) vengono confusi nel caso in cui più di una applicazione utilizzi la stessa stringa per WM_CLASS.

+3

Vedi anche [bug ID: 6.528.430] (http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6528430). – trashgod

+0

Sembra che non intendano affrettarsi con questo ... :-(Spero che i moderni sistemi di gestione delle finestre di Gnome 3, Unity e, forse, Windows 7 causeranno il risveglio di Oracle. Purtroppo, sembra che abbiano scelto un modo diverso, specifico per Unity di integrarsi con Unity. – Ivan

+0

A proposito, "ID bug: 6528430" sembra essere un problema Java 6. Perché non archiviare lo stesso per Java 7 e 8? Dubito che aggiungeranno mai tali una caratteristica di una versione Java precedente, la possibilità sembra molto meglio con lo sviluppo in-vivo come Java 8. – Ivan

risposta

2

This blog post ha trovato il campo in Toolkit che lo controlla, denominato awtAppClassName. Si suggerisce di utilizzare la riflessione per modificarlo:

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