Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2004
    Messaggi
    99

    [Java] Runnable Jar non esegue tutte le operazioni!

    Ciao a tutti,



    mi interesserebbe arrivare ad una soluzione per quanto riguarda il mio problema.

    Premessa: sono un neo programmatore di Java EE (IDE Eclipse Indigo).

    Ho creato un piccolo programmino che si basa su un semplice JFrame contenente qualche JTextField e JButton.


    Il problema è che volevo rendere quest'applicazione eseguibile da terzi tramite doppio click su un file Jar, e dopo aver esportato "Runnable Jar", tutto funziona splendidamente tranne la restituzione un valore ottenuto con "sun.jdbc.odbc.JdbcOdbcDriver".

    Non capisco perchè ma lanciando da console il Jar, funziona, così come funziona il progetto facendo partire direttamente il "Run" da Eclipse.

    Il runnable Jar è arricchito dai package di riferimento, e il driver jdbcodbc fa parte del pacchetto JRE7 incluso nel progetto...perchè non va?


    Se ne aveste bisogno potrei allegare il codice!


    grazie anticipatamente a tutti!!
    se mi chiedeste chi è per me un vero amico vi risponderei che è una persona che io considero alla pari di me.

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    perché da neo-programmatore hai preso un IDE e non ti sei preoccupato di fissare concetti come il CLASSPATH.

    Quando il programma che stai sviluppando si appoggia a librerie di terze parti (JDBC nel tuo caso) devi fare in modo che queste siano nel classpath di esecuzione: o te le porti dietro o imponi appunto che ci siano.
    Portartele dietro significa che devi includerle nel tuo archivio che distribuisci.

    Ricorda poi che di per sé il jar è un archivio, non un eseguibile. Esegui un comando jar con java -jar nomeJar. Anche in questo caso devi preoccuparti di fissare il classpaht corretto per l'esecuzione.

    Molto spesso per gli eseguibili si preparano degli script (sh o bat) e quelli si che sono eseguibili con doppio clic, script che devi preparare tu.

    Consiglio: guarda bene argomenti come CLASSPATH, creazione ed esecuzione di jar. Il fatto che funzioni da eclipse è irrisorio
    RTFM Read That F*** Manual!!!

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2004
    Messaggi
    99
    Capisco.

    Premettendo che: C:\Users\*********>java -version
    java version "1.7.0_04"
    Java(TM) SE Runtime Environment (build 1.7.0_04-b22)
    Java HotSpot(TM) 64-Bit Server VM (build 23.0-b21, mixed mode)


    il path e classpath vengono impostati in automatico da Java x questa versione?

    a quanto pare però qualcosa non torna...e fermo restando che io debba approfondire un'argomento importante come il ClassPath, leggendo ho scovato il comando -verbose.

    sul file mi da l'errore seguente (con comando "C:\Java -verbose nomefile.jar"):
    Error: Could not find or load main class hw.jar

    Addirittura?!!?


    EDIT:

    trovata discussione con problema similare qui:

    http://forum.html.it/forum/showthrea...h&pagenumber=3

    cercherò di capire come muovermi!
    se mi chiedeste chi è per me un vero amico vi risponderei che è una persona che io considero alla pari di me.

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    non confondere i concetti:
    PATH --> percorso in cui il sistema operativo va a cercare i tuoi eseguibili (es. java.sh o java.exe) e questo ti serve se vuoi compilare o eseguire.
    Questo dice solo dove trovare gli eseguibili per gli strumenti che vuoi usare.
    Dalla versione 1.4 in poi l'installazione del JDK comporta l'aggiornamento della variabile d'ambiente PATH, aggiungendo appunto le voci relative alla directory bin di java

    CLASSPATH --> percorso in cui il classLoader cerca i tuoi .jar. ClassLoader è qualcosa che riguarda java, non il sistema (anche se puoi settare la variabile d'ambiente).
    Non è obbligatorio settare una variabile d'ambiente con il classpath, devi ricordare tu che quando esegui un programma java, tutte le informazioni devono essere disponibili

    a tal proposito guarda qui

    path di ricerca:

    a. percorso corrente (.)
    b. CLASSPATH (se settata)
    c. il valore di -cp o --classpath (che sovrascrive i primi due)
    d. l'archivio jar specificato con l'opzione -jar, che sovrascrive i precedenti valori

    Di solito io non uso settare la variabile d'ambiente CLASSPATH, ma creare uno script che lancia il comando java specificando il classpath desiderato.

    Error: Could not find or load main class hw.jar
    che classe è?
    RTFM Read That F*** Manual!!!

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2004
    Messaggi
    99
    mmm...stranamente HW.jar è il nome che ho scelto per la destinazione del runnable jar...non è una classe. Dice di non trovare la classe mail principale!

    ma com'è possibile?
    se mi chiedeste chi è per me un vero amico vi risponderei che è una persona che io considero alla pari di me.

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    perché fin'ora io ti ho parlato di dove il tuo sistema deve trovare le informazioni per eseguire.
    Quando si crea un jar bisogna specificare delle altre informazioni, tipo la mainClass e queste vanno scritte nel MANIFEST, per cui ti invito a guardare la documentazione riguardo questo passo.
    Lascia perdere gli strumenti di eclipse e fallo un paio di volte a manina, così capisci
    RTFM Read That F*** Manual!!!

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2004
    Messaggi
    99
    mmm...eppure non mi è chiaro come possa funzionare tutto (quindi riconoscere anche la main class perchè se no non funzionerebbe nulla) tranne il metodo che sfrutta la jdbcdbc connection..

    ho letto che essendo parte del pacchetto sun dovrebbe essere compresa nel "bootstrap" ossia di tutto ciò che per default è infilato in un jar.

    Devo dire che è tutto molto complesso...ma non demordo, devo venirne a capo!
    se mi chiedeste chi è per me un vero amico vi risponderei che è una persona che io considero alla pari di me.

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    senza complicarti la vita:

    1. crea un jar con quanto ti interessa. Nel manifest indica solo le dipendenze (oltre alle info standard). Non includere le lib esterne nel jar
    2. crea script o .bat che esegue

    java -cp tuoClasspath pathcompletomainclass opzioni

    3. lancia il tutto

    e vedi che funziona

    passi dal non sapere niente al perderti in info che non ti interessano.
    RTFM Read That F*** Manual!!!

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2004
    Messaggi
    99
    Tutto risolto.

    Ho fatto delle verifiche sul Manifest e adesso il runnable jar fa il suo mestiere.

    Seguendo i tuoi consigli valia ho anche fatto un semplicissimo .bat per lanciare questa piccola applicazione, e noto che insieme al JFrame fa apparire la console per i piccoli System.out.println che saltuariamente ho richiamato nel codice.

    Curiosità come mai da bat appare la console mentre da doppio click su Jar no?

    Forse perchè il .bat è un comando che richiama la console e quindi visualizza i restanti comandi di conseguenza?

    grazie come sempre per l'attenzione.
    se mi chiedeste chi è per me un vero amico vi risponderei che è una persona che io considero alla pari di me.

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    ripeto: il .jar è un archivio, un archivio è un eseguibile?

    il .bat è uno script, di default mantiene lo standard error e lo standard output (ecco perché hai le system.out), ma puoi modificare queste opzioni (e guarda come funzionano questi script)

    Inoltre, come noti, le info del manifest servono a java per poter capire cosa ha davanti
    RTFM Read That F*** Manual!!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.