Allora, scusa ma partiamo da un dato: in qualunque modo sia installata (e senza considerare ora i collegamenti creati), se vai da console nella directory "giusta" e avvii la tua applicazione ... funziona oppure no?
Allora, scusa ma partiamo da un dato: in qualunque modo sia installata (e senza considerare ora i collegamenti creati), se vai da console nella directory "giusta" e avvii la tua applicazione ... funziona oppure no?
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
Ciao andbin,
ho utilizzato un altro tool che mi permette di creare proprio un file .exe il software.
Ovviamente nella procedura di installazione del software viene chiesto all'utente il destination folder, per esempio:
quindi mi ritrovo con lo stesso problema di cui sopra (nel senso che il problema ovviamente non dipende se il file finale per l'esecuzione del software sia un .jar o .exe). Il problema del riferimento alla cartella "dirIniziale" ovviamente permane.codice:C:\PVE Software\PVE 1.0
Esempio nel codice:
ove "dirIniziale" è contenuta nella cartella principale del progetto.codice:File dir = new File("dirIniziale\\Europe"); DefaultComboBoxModel modello = new DefaultComboBoxModel(); for (File f : dir.listFiles()) { modello.addElement(new FileItem(f)); } menuCitta.setModel(modello);
cioè la cartella del progetto contiene le cartelle : "build", "dirIniziale", "dist", "lib", ecc...
Ho pensato di modificare tutti i percorsi relativi (riferiti a "dirIniziale") nel codice (per esempio) da:
acodice:File dir = new File("dirIniziale\\Europe");
cioè considerare la directory "dirIniziale" come sottocartella di una directory del progetto.codice:File dir = new File("dist\\dirIniziale\\Europe");
Oppure, considerare nella creazione della procedura di installazione (utilizzando il tool) un absolute path, in modo tale che tutta la cartella del progetto mi venga installaza in C: e credo di risolvere in questo modo.
Cosa mi suggerisci?
Grazie
Che confusione.
Io al posto tuo semplicemente avrei messo i documenti sotto un package (es. initdocuments) e usato la funzione fatta prima per le immagini.
codice:package initdocuments; import java.io.InputStream; public class Resources { private Resources() {} public static InputStream getFileAsStream(String name) { return AppResources.class.getResourceAsStream(name); } }
Già che se tu avessi fatto una gestione più intelligente dei package ti saresti risparmiato di fare un'altra classe.
Invece di fare il package "immagini"(http://forum.html.it/forum/showthrea...adid=2924734#3), avresti potuto fare package resource e fatti un sotto package con immagini e l'altra con document e poi scrivere semplicemente nel recupero delle immagini o dei documenti:
Resource.getIconURL("img/immagine.jpg")
oppure
Resource.getFileAsStream("doc/Asia.txt")
Evitandoti tutti sti problemi di incastramento dei path.
Ciao.
Ultima modifica di schumy2000; 21-04-2015 a 12:41
I computer sono incredibilmente veloci, accurati e stupidi.
Gli uomini sono incredibilmente lenti, inaccurati e intelligenti.
Insieme sono una potenza che supera l'immaginazione.
A.Einstein
Ciao schumy, purtroppo la cartella "dirIniziale" non è proprio come la cartella immagini che contiene solo file .jpg .png o .gif.
Questa cartella contiene altre sottocartelle di cui faccio uso differente, questa contiene altre 2 sottocartelle:
"Africa-Asia" e "Europe" che a loro volta contengono entrambe le sottodirectory delle città, che a loro volta contengono altre due sottocartelle , che a loro volta contengono file .txt.
Ecco alcuni utilizzi che ne faccio nel mio codice:
per popolare la JComboBox con i nomi delle città di "Africa-Asia" (nomi che vengono presi dai nomi delle sue sottodirectory di 1° ordine)codice:File dir = new File("dirIniziale\\Africa-Asia"); DefaultComboBoxModel modello = new DefaultComboBoxModel(); for (File f : dir.listFiles()) { modello.addElement(new FileItem(f)); } menuCitta.setModel(modello);
per popolare la JComboBox con i nomi delle città di "Europe"codice:File dir = new File("dirIniziale\\Europe"); DefaultComboBoxModel modello = new DefaultComboBoxModel(); for (File f : dir.listFiles()) { modello.addElement(new FileItem(f)); } menuCitta.setModel(modello);
in altre parti del codice vado ad utilizzarla così:
ecc..codice:File dir = new File("dirIniziale\\" + pathname.getContinente() + File.separator + pathname.getCitta()); fileIrr = (dir + File.separator + pathname.getData() + File.separator + "Radiation.txt");
Come vedi non si tratta solo di estrarre i file come per il package immagini..credo che la situazione sia un pò differento , no?
Sì, la situazione è un po' differente rispetto a singole e semplici "risorse" (es. icone/immagini).
Ma secondo me stai continuando a girare attorno ad un falso problema. Se nel codice vuoi fare riferimento a file o directory con una specifica relativa, che quindi di per sé è risolta rispetto alla directory corrente, allora la cosa più semplice (e che non richiede modifiche o codice extra) è stabilire e richiedere che chiunque avvii la applicazione, lo faccia avendo come directory corrente quella "giusta" per far funzionare l'applicazione.
Se l'utente vuole lanciare "a mano" l'applicazione, saranno affari suoi assicurare questo.
Se è avviata da un collegamento che è stato installato con un sistema di setup, la directory è appunto controllabile, cioè i collegamenti vanno creati appositamente in modo corretto.
Tutto qui.
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet