2012-05-15 15 views
5

Todos/base de NetBeans-aplicaciones Java Swing GUI parecen tener el mismo valor WM_CLASS:¿Cómo alterar el valor WM_CLASS en una aplicación Java GUI basada en Swing o NetBeans Platform?

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

Este parámetro se puede ver mediante la emisión de comandos xprop y apuntando a la ventana. El propósito práctico de personalizarlo es permitir que los muelles similares a Mac (AWN, por ejemplo (y, tal vez, la Unidad de Ubuntu)) distingan las ventanas de la aplicación y las agrupen bajo el ícono del iniciador fijado de la aplicación. Para que esto funcione, el parámetro StartupWMClass se debe establecer en consecuencia en el archivo .application en ~/.local/share/applications o /usr/share/applications. Huelga decir que AWN (y análogos) se confunden en caso de que más de una aplicación use la misma cadena para WM_CLASS.

+3

ver también [bug ID: 6528430] (http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6528430). – trashgod

+0

Parece que no pretenden apresurarse con esto ... :-(Espero que los modernos sistemas de gestión de ventanas de Gnome 3, Unity y, tal vez, Windows 7 hagan que Oracle se despierte. Lamentablemente, parece que han elegido una forma diferente de Unity para integrarse con Unity. – Ivan

+0

Por cierto, "Bug ID: 6528430" parece ser un problema de Java 6. ¿Por qué no presentar lo mismo para Java 7 y 8? Dudo que alguna vez agreguen tales una característica de una versión heredada de Java, la posibilidad parece mucho mejor con el desarrollo en línea, como Java 8. – Ivan

Respuesta

2

This blog post encontró el campo en Toolkit que lo controla, llamado awtAppClassName. Se sugiere el uso de reflexión para modificarlo:

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