Pagina 1 di 1

[Java] [RISOLTO] Configurazione di JDK (binari di Sun Microsystem)

Inviato: lunedì 11 giugno 2007, 13:20
da nocemoscata
Salve a tutti ! Ieri ho installato i pacchetti .deb di java sulla mia Ubuntu 7.04 (seguendo una guida http://lordneo.wordpress.com/2007/04/28 ... buntu-704/) per poter avere il necessario per sviluppare programmi. Ho riscontrato però qualche malfunzionamento.

Innanzi tutto, faccio girare Compiz (cmq gli effetti desktop) a 16bit (per via della scheda grafica ATI), quindi con java, come ho letto in parecchi post, ho avuto dei problemi utilizzando la GUI Swing (il fatto che non si vedano le componenti grafiche, anche se comunque sotto ci sono). Ho letto che c'è una soluzione per questo problema, solo che, utilizzando qualche programma con GUI (usando specialmente il L&F Metal con o senza bordi Metal nelle finestre, e con Compiz attivato prima, durante e dopo la creazione di tali finestre) il problema non c'è, senza che io abbia installato quella patch per risolvere il problema. Ma in alcuni casi il problema persiste.

L'altro problema riguarda probabilmente il classpath. Praticamente, quando dentro un programma faccio riferimento ad una risorsa tipo "archivio//materiale.data", insomma faccio qualche operazione I/O su file, il programma non trova il percorso e quindi non esegue l'operaione (questo facendo partire o il JAR dandogli il suo percorso, oppure da sorgente sempre dando il percorso del file principale). Mentre se mi posiziono nella cartella in cui c'è il JAR oppure da sorgente nella cartella in cui c'è il file principale, ed eseguendo il programma da lì, funziona correttamente. Il problema non c'è quando compilo i programmi (almeno per i sorgenti).

Infine vorrei sapere cosa installano di preciso questi pacchetti presenti nei repository (quelli proposti dalla guida):
sun-java6-bin
sun-java6-jre
sun-java6-jdk
sun-java6-plugin
Nel caso avessi fatto un pò di casino, sono disposto reinstallare tutto.

Grazie anticipatamente.

Re: [Java] Configurazione di java

Inviato: lunedì 11 giugno 2007, 14:50
da Massimo S.
L'altro problema riguarda probabilmente il classpath. Praticamente, quando dentro un programma faccio riferimento ad una risorsa tipo "archivio//materiale.data", insomma faccio qualche operazione I/O su file, il programma non trova il percorso e quindi non esegue l'operaione (questo facendo partire o il JAR dandogli il suo percorso, oppure da sorgente sempre dando il percorso del file principale). Mentre se mi posiziono nella cartella in cui c'è il JAR oppure da sorgente nella cartella in cui c'è il file principale, ed eseguendo il programma da lì, funziona correttamente. Il problema non c'è quando compilo i programmi (almeno per i sorgenti).
Allora il classpath riguarda solo le classi, non per accedere ad latri tipi di file (a meno che non usi metodi come questo http://java.sun.com/j2se/1.5.0/docs/api/java/lang/ClassLoader.html#getResource(java.lang.String)  )
Altrimenti, ad esempio se fai

Codice: Seleziona tutto

file = new java.io.File("pippo.txt");

Il percorso è relativo alla directory di lavoro corrente, quella dalla quale hai lanciato il comando java

Per quanto riguarda i pacchetti:
sun-java6-bin non lo so, forse è una dipendenza degli altri
sun-java6-jre è il solo ambiente di esecuzione, java runtime environment, puoi eseguire classi ma non puoi compilare
sun-java6-jdk è l'ambiente di sviluppo, java develpment kit, puoi anche compilare
sun-java6-plugin è il plugin java per firefox

Re: [Java] Configurazione di java

Inviato: lunedì 11 giugno 2007, 16:00
da nocemoscata
Altrimenti, ad esempio se fai:

Codice: Seleziona tutto

file = new java.io.File("pippo.txt");
Il percorso è relativo alla directory di lavoro corrente, quella dalla quale hai lanciato il comando java
Esattamente come funziona. Ma su windows, dopo aver installato JDK  e tutto l'occorrente e dopo aver impostato la variabile d'ambiente, per quanto riguarda i JAR, bastava andare sul file,  tasto destro e avvia con Java (opzione per i jar) e il programma partiva. Qui su Linux, anzi con Nautilus, dopo l'installazione dei pacchetti spunta l'opzione per i file JAR di poterli avviare con Java (opzione per i jar), però per quanto detto prima il programma non trova il file e non parte, appunto perchè non mi sono posizionato nella directory del JAR. Quindi ci sarebbe un modo per far avviare il JAR tranquillamente con quell'opzione tramite Nautilus come in Windows ?

Questa è la porzione di classe che fa caricare il file (senza di esso il programma non parte):

Codice: Seleziona tutto

public class IOManager
{
  // dati membri
  private final String NOME_FILE_SALVATAGGIO = "archivio//lista.datafilm";
  public ListaPrimaria caricaListaPrimaria () throws IOException, ClassNotFoundException
  {
    File inFile = new File (NOME_FILE_SALVATAGGIO);
    FileInputStream inStream = new FileInputStream (inFile);
    ObjectInputStream inObject = new ObjectInputStream (inStream);
    ListaPrimaria listaPrimaria = (ListaPrimaria) inObject.readObject ();
    inObject.close ();
    return listaPrimaria;
  }
}
Ovviamente, non trovando anche altri percorsi (di immagini e suoni) neanche loro vengono visualizzate.
Sinceramente non ho mai utilizzato il metodo getResource.

Per quel problema della grafica a te è capitato ? A me continua stranamente a funzionare !  :-\

grazie !

EDIT: neanche ad aprire un'altro topic, siccome sto ricominciando a lavorare con Java dopo alcuni mesi di letargo, mi consiglieresti quelche manuale o guida completa e gratuita su Java che sia aggiornata alla versione 6 ? Ho cercato ma non ho trovato niente, fino ad ora ho lavorato con il mokabook, solo che è aggiornato alla versione 4 di Java. Ad esempio quel metodo getResource mi pare di non averlo letto da nessuna parte.

Grazie ancora !!!!!!!!

Re: [Java] Configurazione di java

Inviato: lunedì 11 giugno 2007, 17:15
da Massimo S.
Esattamente come funziona. Ma su windows, dopo aver installato JDK  e tutto l'occorrente e dopo aver impostato la variabile d'ambiente, per quanto riguarda i JAR, bastava andare sul file,  tasto destro e avvia con Java (opzione per i jar) e il programma partiva. Qui su Linux, anzi con Nautilus, dopo l'installazione dei pacchetti spunta l'opzione per i file JAR di poterli avviare con Java (opzione per i jar), però per quanto detto prima il programma non trova il file e non parte, appunto perchè non mi sono posizionato nella directory del JAR. Quindi ci sarebbe un modo per far avviare il JAR tranquillamente con quell'opzione tramite Nautilus come in Windows ?
Boh, forse il problema qui è più generale, non riguarda solo java ma piuttosto quale è la directory di lavoro quando si lancia un file da nautilus.
Io pensavo che avviavi il file .jar con il comando java da terminale, in quel caso la dir. di lavoro era quella indicata dal prompt del terminale.

E se ti crei un file di script di shell  (.sh) e in quello imposta la dir giusta con il comando cd e poi lanci il .jar ?
Se fai doppio click sul file .sh dovrebbe funzionare.
Forse anche meglio del file .sh ci dovrebbe essere un modo per creare una icona di avvio sul desktop, su un pannello o sul menù
Sinceramente non ho mai utilizzato il metodo getResource.
Quel metodo e simili cercano le risorse in mezzo alle classi, nel calsspath, quindi nel tuo caso dentro al jar stesso.
Però forse in questo modo si può accedere alla risorsa in sola lettura.
Per quel problema della grafica a te è capitato ? A me continua stranamente a funzionare !
Si mi ricordo che una volta ho avuto un problema simile con beryl attivo.

Però normalmente su Ubuntu non ho ne Compiz (Effetti desktop) ne beryl attivi. Attivo beryl solo per fare lo sborone se mi si avvicina uno schiavo delle finestre che mi decanta le meraviglie dell'interfaccia di vista  ;D
EDIT: neanche ad aprire un'altro topic, siccome sto ricominciando a lavorare con Java dopo alcuni mesi di letargo, mi consiglieresti quelche manuale o guida completa e gratuita su Java che sia aggiornata alla versione 6 ? Ho cercato ma non ho trovato niente, fino ad ora ho lavorato con il mokabook, solo che è aggiornato alla versione 4 di Java. Ad esempio quel metodo getResource mi pare di non averlo letto da nessuna parte.
Aggiornata alla 6 .... non saprei ... se fai una ricerca sul forum troverai che più di una volta hanno chiesto guide su Java e sono state date varie risposte, dacci un'occhiata ma non so se qualcuna è aggiornata alla versione 6.

Ciao

Re: [Java] Configurazione di java

Inviato: martedì 12 giugno 2007, 0:36
da nocemoscata
OK. Grazie mille per l'aiuto !  (good)

Bye bye

Re: [Java] Configurazione di java

Inviato: giovedì 14 giugno 2007, 13:23
da nocemoscata
Qualche altro chiarimento prima di chiudere:

Ho installato il binario fornito da SUN (quello con JDK6up1+Netbeans5.5.1) e ho installato il tutto sulla directory /opt. Ho creato dei collegamenti in /usr/bin così posso arrivare semplicemente a java (ed anche javac e jar) oda terminale oppure con nautilus (o comunque quei programmi che puntano in /usr/bin). Ma quando ho installato i pacchetti .deb avevo dato il comando sudo update-alternative --config java per rendere quel JAVA installato quello predefinito sul sistema. C'è bisogno di fare la stessa cosa col binario di SUN ? Inoltre invece di creare tutti i collegamenti non si può creare una variabile d'ambiente che punti su /opt/.../bin (in modo che tutti i programmi (non solo la shell) vedano java da qualunque posizione) un pò come si fà in win dopo l'installazione della JDK ?

Faccio notare che il problema della GUI (usando contemporaneamente AIGLX + Compiz) è totalmente sparito in tutti i programmi che usano SWING.

Quel problema del classpath della mia applicazione l'ho risolto mettendo il file in questione in:

Codice: Seleziona tutto

private final String NOME_FILE_SALVATAGGIO = System.getProperty("user.home") + "//archivio//lista.datafilm";
dopo aver costruito le directory nella home dell'utente a colpi di mkdir(). Correggimi se sbaglio questo tipo di classpath che uso si chiama percorso assoluto ? Mentre quello che usavo prima era un percorso relativo ?

grazie !

Re: [Java] Configurazione di java

Inviato: giovedì 14 giugno 2007, 14:48
da Massimo S.
SektoR22 ha scritto: Ho installato il binario fornito da SUN (quello con JDK6up1+Netbeans5.5.1) e ho installato il tutto sulla directory /opt. Ho creato dei collegamenti in /usr/bin così posso arrivare semplicemente a java (ed anche javac e jar) oda terminale oppure con nautilus (o comunque quei programmi che puntano in /usr/bin). Ma quando ho installato i pacchetti .deb avevo dato il comando sudo update-alternative --config java per rendere quel JAVA installato quello predefinito sul sistema. C'è bisogno di fare la stessa cosa col binario di SUN ?
Io su Ubuntu ho sempre installato java da synaptic, quindi non saprei. Di solito in questi casi, adotto il metodo sperimentale galileano, ovvero provo e vedo se funziona, oppure se già ti funziona senza dare il sudo update-alternative --config java stai a posto, controlla.
Inoltre invece di creare tutti i collegamenti non si può creare una variabile d'ambiente che punti su /opt/.../bin (in modo che tutti i programmi (non solo la shell) vedano java da qualunque posizione) un pò come si fà in win dopo l'installazione della JDK ?
In win mi pare che imposta una variabile JAVA_HOME e poi aggiunge alla variabile PATH=%PATH%;%JAVA_HOME%\bin

Puoi provare pure in ubuntu, ricorda però che per riferirsi alla variabili si usa un $ al posto di due %, che il separatore di path è : invece di ;
Es. PATH=$PATH:$JAVA_HOME/bin

Io di solito le variabili le metto in /etc/environment  (riavvia il xserver per far vedere le modifiche alle app. grafiche)

Quel problema del classpath della mia applicazione l'ho risolto mettendo il file in questione in:

Codice: Seleziona tutto

private final String NOME_FILE_SALVATAGGIO = System.getProperty("user.home") + "//archivio//lista.datafilm";
dopo aver costruito le directory nella home dell'utente a colpi di mkdir(). Correggimi se sbaglio questo tipo di classpath che uso si chiama percorso assoluto ? Mentre quello che usavo prima era un percorso relativo ?
Si cosi usi un path assoluto (mi pare che c'era un metodo mkdirs() che creava tutte le dir. intermedie in una sola volta)
Però fai confusione fra 2 cose diverse, path e classpath.

Qui stiamo parlando del "path" (percorso) del file lista.datafilm, il "classpath" è un'altra cosa, è il path dove cercare le classi, i file .class

Re: [Java] Configurazione di java

Inviato: giovedì 14 giugno 2007, 16:02
da nocemoscata
Ok, al più presto provo le variabili d'ambiente e ti faccio sapere. Per sudo update-alternative --config java non spunta neanche nella lista (ma è l'ultimo problema ora come ora funziona). Grazie anche per la precisazione su path e classpath.

Re: [Java] Configurazione di java

Inviato: giovedì 14 giugno 2007, 23:07
da nocemoscata
Inserendo quella variabile non funzionava. Però, editando sempre quel file /etc/enviroment (la prima riga dove ci sono tutti i path [PATH="/usr/local/sbin:/usr...."], seguendo le tue indicazioni sui simboli) e aggiungendo alla fine della riga il path dei binari della JDK (/opt/jdk.../bin) ha funzionato perfettamente (dopo il riavvio di X)  (good). Quindi la riga è diventata:

Codice: Seleziona tutto

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11:/usr/games:/opt/jdk1.6.0_01/bin"
In effetti su Windows facevo la stessa cosa (non ho mai toccato la variabile JAVA_HOME !) in quanto editavo la variabile d'ambiente Path aggiungendo alla fine solamente il percorso dei binari del JDK.

Però mi sorge un dubbio (solo un dubbio da chiarire, non un problema !!). Ma cosa sarebbe di preciso questa JAVA_HOME? A cosa punta ? Se dentro c'è contenuto il percorso del JDK e/o del JRE, cosa succede se faccio due installazioni di JAVA ?

grazie ancora !

Re: [Java] Configurazione di java

Inviato: venerdì 15 giugno 2007, 11:34
da Massimo S.
L'uso della variabile JAVA_HOME è una convenzione, non so quanto standardizzata.
Il percorso contenuto in JAVA_HOME è un percorso dove alcuni software vanno a cercare Java se non lo trovano in altri modi. Un esempio di un tale software, mi pare sia Apache Tomcat.

Comunque JAVA_HOME deve puntare alla dir. principale della jdk, quindi non alla dir. .../bin  ma alla dir che contiene .../bin
Per questo spesso io definisco JAVA_HOME  e poi metto nel path di ricerca dei comandi (var $PATH)  il percorso $JAVA_HOME/bin

Però non è obbligatorio impostare la variabile JAVA_HOME se il sistema e i programmi che necessitano della virtual machine java riescono comunque a trovarla in altro modo.

Se si hanno più jdk installate, la JAVA_HOME potrà puntare a solo una di queste, poi magari se un particolare programma richiede un'altra jdk si può creare uno script che modifica la JAVA_HOME e poi avvia il programma in questione (in questo modo la JAVA_HOME modificata sarà visibile solo a quel programma)

Inoltre anche se la variabile JAVA_HOME non è settata, spesso, nelle istruzioni di installazione di qualche software ci si riferisce con termini tipo in maniera sintetica alla dir. dove è installata la jdk.

Re: [Java] Configurazione di java

Inviato: venerdì 15 giugno 2007, 12:39
da nocemoscata
Ok ! Con questo chiudo il Topic e metto risolto (modifico il titolo mettendo che Java è quello di Sun Microsystem).
Grazie mille ancora Massimo  S. per l'aiuto e i consigli !

Bye