2011-04-06 14 views
14

Quando si utilizza l'API com.sun.tools.attach sulla mia macchina Windows, ottengo il seguente errore quando si effettua una chiamata aJava API Allega: java.library.path cambia dinamicamente

VirtualMachine.list() 

java. lang.UnsatisfiedLinkError: nessun collegamento in java.library.path

Il motivo è il file attach.dll mancante. Il file attach.dll si trova in $JRE/bin/. Quando si avvia il mio programma Java con -Djava.library.path=[Directory to the attach.dll], tutto funziona senza output di errore.

Ora, non voglio aggiungere tutti i programmi Java per avviare questo brutto parametro JVM. Quindi le mie domande sono:

  1. è la mia macchina non configurato a destra e il $JRE/bin/ dovrebbero essere nel percorso della libreria in ogni caso?

  2. In caso contrario, come è possibile aggiungere il percorso in modo dinamico? System.setProperties("java.library.path",StringOfThePathToTheAttach.dll); non funziona. Il percorso della libreria è stato modificato, ma l'errore si verifica comunque. Ha qualcosa a che fare con SecurityManager o JVM?

+0

Dopo aver modificato il percorso della libreria, si sta utilizzando un nuovo programma di caricamento classi? –

+0

@ joseph-ottinger: no, immagino che dovrei? –

risposta

5

Il tuo System.setProperty("java.library.path", StringOfThePathToTheAttach.dll); dovrebbe funzionare. La mia ipotesi è che lo chiami troppo tardi. In altre parole, c'è un tentativo di accedere alla DLL prima di impostare la proprietà.

È possibile emettere il valore corrente per java.library.path dopo che la proprietà è stata impostata nel codice e nuovamente prima della chiamata al metodo offendente?

Ad esempio, se viene visualizzato "Prima della chiamata attach.dll" prima di visualizzare "Dopo l'impostazione della proprietà", è possibile sapere dove si trova il problema.

Edit:

Un modo migliore per puntare a librerie native è quello di utilizzare System.load(StringOfThePathToTheAttach.dll) - ancora una volta, prima della riga di codice.

+0

@ Teddy-yueh Non sono sicuro, se è il mio compito caricare il file dll. Dopotutto sulla mia macchina Ubuntu il percorso della libreria attach.so è già collegato. Suppongo che la mia macchina Windows sia stata appena configurata male. –

5
System.setProperty("java.library.path", System.getProperty("java.library.path") + File.pathSeparator + FOLDER_THAT_CONTAINS_ATTACH_DLL); 
+5

Questa è una soluzione davvero orribile se non si scorre a destra;) – JustinKSU

Problemi correlati