2010-12-13 8 views
20

JDK 1.6 viene fornito in bundle con uno strumento pratico chiamato VisualVM che consente di ispezionare e interagire con l'esecuzione di processi Java. Una caratteristica è che rileva automaticamente le JVM in esecuzione sul computer locale. Molti sono elencati come "(pid xxxx)" ma alcuni hanno un nome e un'icona, come VisualVM stesso e altri come NetBeans (vedi lo screenshot in this dzone article per esempio).Come si assegna un nome a VisualVM "<Applicazione sconosciuta>"?

Come si inserisce il nome dell'applicazione e l'icona nella JVM in modo che si visualizzi correttamente nell'elenco delle applicazioni VisualVM? La mia app deve essere in esecuzione JRE 1.6 o posso farlo anche con la versione 1.5?

+0

Ecco un suggerimento che ho appreso guardando LocalVmManager in OpenJDK: l'elenco delle VM locali viene rilevato cercando in $ TMP/hsperfdata_ $ USER /. Ogni file in là è chiamato per il PID della VM. In essa è contenuta la riga di comando come "sun.rt.javaCommand", ma il file per il processo VisualVM non contiene la stringa "VisualVM", quindi non può provenire direttamente da quel file. –

risposta

26

Ho risolto metà della mia domanda tramite una risposta NetBeans forum post. L'aggiunta di una riga di comando JVM arg di -Dvisualvm.display.name=FooBar rende VisualVM mostra l'app come "FooBar". Ma non riesco ancora a capire come influenzare l'icona.

AGGIORNAMENTO: Ahimè, penso di aver trovato la mia risposta per l'icona. Le icone sono codificate in VisualVM tramite MainClassApplicationTypeFactory nell'origine VisualVM, richiamate dal metodo statico ApplicationTypeFactory.getApplicationTypeFor (Application). Non riesco a vedere alcun modo per iniettare una nuova icona in VisualVM, tranne facendo un plugin VisualVM che potrebbe registrare un nuovo factory di tipo - il plugin Glassfish lo fa tramite GlassFishApplicationTypeFactory.initialize() per esempio.

+0

Grazie, Chris. Mi stavo chiedendo proprio questo venerdì. Niente più indovinelli! –

+1

Altri consigli per i futuri lettori: mi sembra che non è possibile avere spazi nel nome dell'app. Cioè, -Dvisualvm.display.name = Foo Bar e -Dvisualvm.display.name = "Foo Bar" non funziona. –

+0

kinda lame deve scrivere un plug-in e registrarsi solo per avere una rappresentazione visiva decente dell'app che si desidera tracciare. Forse un file manifest che viene scoperto automaticamente da VisualVM sarà bello ... o semplicemente usa l'icona propria dell'app ... in qualche modo – Alex

Problemi correlati