Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 16 su 16
  1. #11
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Quote Originariamente inviata da kekkuz87 Visualizza il messaggio
    ok quindi semplicemente non posso usare solo il file jar ma devo "portare in giro" tutta la cartella dist...ok e ma non esisterebbe un modo per poter portare in giro solo il file jar??
    Non sempre è possibile ed è fortemente scoraggiato farlo anche quando è "tecnicamente" possibile. Per diverse, validissime, ragioni:

    1) Le librerie sono, appunto, librerie: non sono software tuo, non le sviluppi tu e quindi non è concettualmente corretto che vengano incorporate nel tuo software

    2) Le librerie sono soggette ad aggiornamenti: se fossero tutte contenute nel tuo JAR, l'aggiornamento sarebbe impossibile (o, quantomeno, molto oneroso: dovresti spacchettare tutto, aggiornare e re-impacchettare tutto)

    3) Alcune librerie sono "sealed": sono, cioè, impacchettate in un jar con un determinato nome e non possono funzionare se non dentro a quel particolare jar; queste non possono essere incorporate.

    4) Alcuni produttori di libreria vietano questa pratica, per ovvie ragioni.

    PS se è troppo complicato mi accontento di questo
    Più che "complicato" è "controproducente". Conviene sempre tenerle separate e distribuirle "al di fuori" del JAR... la fatica è la stessa: fai un file ZIP con dentro il JAR e la directory "lib"... fatto.

    PPS ma il "problema" si pone ogni volta che utilizzerò una libreria esterna
    Ovviamente sì.

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  2. #12
    Utente di HTML.it
    Registrato dal
    Dec 2013
    Messaggi
    24
    grazie mille per le risposte siete utilissimi come al solito...in effetti avete ragione non avevo pensato al fatto che se sono librerie di qualcun altro magari chi le ha create non è contentissimo se le incorporo nel mio softwate

    Un ultima cosa poi non disturbo +quando all'inizio del post mi avete suggerito di indicare in fase di serializzazione e deserializzazione il percorso di salvataggio come faccio ad indicare che mi salvi l'archivio ad esempio sul desktop sia nel caso che usi windows che ubuntu (nel senso come faccio che non vi siano conflitti rispetto all sistema operativo che sto usando in un certo momento)??
    PS grazie ancora per l'aiuto siete mitici

  3. #13
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Dire semplicemente "sul desktop" non è sufficiente: su un sistema vi possono essere più desktop, almeno uno per utente, se il desktop è previsto... se non è previsto un sistema grafico molto probabilmente non c'è nemmeno un desktop.
    Di questo devi tenere conto.

    E' più facile, piuttosto, fare riferimento alla directory "home" dell'utente o alla directory dove risiede il programma (o una sua sub-directory).

    Per ottenere la "home" dell'utente, c'è un'apposita property di sistema:

    codice:
    String pathHomeUtente = System.getProperty("user.home");

    Per ottenere la directory dell'applicazione puoi chiamare questo metodo all'interno di una tua classe:

    codice:
    String appDir = new File(getClass().getProtectionDomain().getCodeSource().getLocation().getPath()).getParent();

    (mai provato, ma dovrebbe funzionare)


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  4. #14
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da kekkuz87 Visualizza il messaggio
    come faccio ad indicare che mi salvi l'archivio ad esempio sul desktop sia nel caso che usi windows che ubuntu (nel senso come faccio che non vi siano conflitti rispetto all sistema operativo che sto usando in un certo momento)??
    Ci sono poche directory "notevoli" che è possibile rintracciare da Java senza dover sapere/distinguere il S.O.: sono, ad esempio, la directory "corrente", la directory "home" dell'utente e la directory "temporanea".
    Si rintracciano tramite delle system-property (vedi java.lang.System). Per altre: o le "derivi" (se possibile) in modo relativo da una di queste oppure devi per forza fare della logica di analisi in più sul sistema.
    O in alternativa la rendi configurabile dall'utente (ci sono svariati modi).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #15
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da LeleFT Visualizza il messaggio
    Per ottenere la directory dell'applicazione puoi chiamare questo metodo all'interno di una tua classe:

    codice:
    String appDir = new File(getClass().getProtectionDomain().getCodeSource().getLocation().getPath()).getParent();
    Non ho mai visto (ne usato, quindi) una cosa del genere. Però getLocation() ritorna un URL che immagino (per file su file-system) che sia con il file: protocol. Quindi ipotizzerei di trasformarlo in URI con toURI() e poi passare questo al costruttore di File.
    Ovviamente Lele, è tutta una ipotesi ....
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #16
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Sì, beh... sono andato molto a memoria di una cosa che avevo visto su SO, può essere che abbia scritto una castroneria... un metodo che uso e che funziona è questo:

    codice:
        private String getMyPath() {
            String str = getClass().getResource("NomeClasse.class").toExternalForm();
    
            int start = 0;
            int end = str.indexOf("NomeDelJar.jar");
            if ( str.startsWith("jar:") ) {
                start = 4;
            }
    
            if (str.indexOf("file:/") >= 0) {
                start += 6;
            }
            
            str = str.substring(start, end);
            str = str.replaceAll("%20", " ");
    
            return str;
        }

    Dove NomeClasse.class è il nome di una classe dell'applicazione e NomeDelJar.jar è il nome del file JAR che contiene l'applicazione... questo codice va adeguato alle situazioni: se, ad esempio, il JAR dell'applicazione è all'interno di una sub-directory, allora va adeguato di conseguenza il nome del jar, apponendovi davanti il nome della sub-directory. Insomma, ce la si gioca un po'.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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.