2015-10-23 17 views
13

Sto cercando di capire come determinare quali librerie richiede Java per l'API Desktop, in particolare la funzione BROWSE. Ho letto alcune guide, segnalazioni di bug e soluzioni alternative, ma nessuna di esse funziona.Come trovare le librerie che l'API di Java Desktop richiede su Linux?

Sono riuscito a farlo funzionare su Debian installando i pacchetti libgnome2-0 e gvfs-backends. Il primo è in genere raccomandato (da persone che risolvono lo stesso problema), il secondo è stato un tentativo fortunato perché sembra che l'API Desktop abbia richiesto il vfs. Tuttavia non posso farlo funzionare su Ubuntu 14.04, anche con l'installazione di questi due pacchetti.

Quindi la mia domanda è: come posso trovare quali librerie richiede Java Desktop API su Linux? In particolare Oracle JDK 8 su Ubuntu 14.04. È possibile in qualche modo catturare quali librerie utilizza l'API desktop o ottenere un output di errore dal codice nativo?

EDIT: Ho creato un codice di una riga che sta cercando di utilizzare il browse:

public class Main { 
    public static void main(String[] args) throws URISyntaxException, IOException { 
     Desktop.getDesktop().browse(new URI("http://www.google.com")); 
    } 
} 

Ho cercato di eseguire un comando di tracciare tutti i file che sono stati richiesti durante l'esecuzione del test:

strace -e open,access -f -o browse java -jar BrowseTester.jar 

ho un sacco di uscita di segnalamento sia Java native e Linux le librerie native vengono cercato, trovato e accessibile, ma non sono sicuro come rilevare ciò che è effettivamente manca.

Esempio di uscita:

30171 open("/usr/lib/x86_64-linux-gnu/gvfs/tls/x86_64/libgvfscommon.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) 
30171 open("/usr/lib/x86_64-linux-gnu/gvfs/tls/libgvfscommon.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) 
30171 open("/usr/lib/x86_64-linux-gnu/gvfs/x86_64/libgvfscommon.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) 
30171 open("/usr/lib/x86_64-linux-gnu/gvfs/libgvfscommon.so", O_RDONLY|O_CLOEXEC) = 11 

ho bisogno di un modo per rilevare che le librerie native sono necessari per la funzionalità API browse Java Desktop. Non riesco a toccare il codice che sta chiamando il browse.

EDIT2: Ho provato a installare una nuova Ubuntu 14.04 con un ambiente Gnome completo su una macchina diversa e funziona. Tuttavia vorrei davvero evitare questo perché aggiunge 1,5 GB di (in gran parte) librerie inutilizzate. Sto ancora cercando un modo per trovare ciò che Java richiede esattamente o almeno un qualche tipo di output dal punto in cui non riesce.

+1

Hai già letto http://stackoverflow.com/a/18004334/4618338 e http://stackoverflow.com/a/19795921/4618338 risposte già? Hai bisogno di nomi di librerie specifiche o semplicemente di un URL esterno aperto in java risolverebbe il tuo problema? –

+0

@TrynkiewiczMariusz Ho aggiunto il testo da bounty alla domanda, in quanto sembra possa essere facilmente trascurato. Devo far funzionare la navigazione. Non riesco a utilizzare soluzioni alternative che lo ignorano perché non riesco a toccare il codice che lo sta usando. – sm4

risposta

1

Andare a the source potrebbe aiutare qui. Scavando attraverso la Makefile, trovo questi comprende:

EXTRA_INCLUDES = `pkg-config --cflags glib-2.0` \ 
       `pkg-config --cflags libgnome-2.0` \ 
       `pkg-config --cflags gnome-vfs-2.0`\ 
       `pkg-config --cflags gnome-vfs-module-2.0` \ 
       `pkg-config --cflags bonobo-activation-2.0` \ 
       `pkg-config --cflags libbonobo-2.0` \ 
       `pkg-config --cflags ORBit-2.0` \ 
       `pkg-config --cflags gconf-2.0` 

E il gioco è fatto :)

+0

Purtroppo questo non ha aiutato. Ho tutte queste librerie su entrambi Ubuntu (non funzionante) e Debian (funzionante), a parte ORBit, e ORBit manca su entrambi ... Tuttavia potrebbe significare che i pacchetti siano installati ma non trovati o non utilizzati correttamente. – sm4

+0

Hai controllato che non si tratta solo di 32 bit contro 64 bit? – Tomas

+0

Tutto sembra in ordine, 64 bit. – sm4

0

Ho appena avuto un'altra idea: forse è possibile utilizzare al posto di ltracestrace?

ltrace -e open,access -f -o browse java -jar BrowseTester.jar