Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2016
    Messaggi
    31

    Aggiornare progetto senza cliccare refresh dopo l'aggiunta di file nel workspace

    Salve ragazzi, avevo fatto questa domanda sotto una discussione che avevo gi� aperto ma ho pensato di aprire questa appositamente per questo problema in modo tale che possa servire anche ad altri utenti col mio stesso problema. Allora nel mio progetto l'utente pu� inserire delle foto all'interno di una cartella chiamata images che si trova nel workspace. In questa cartella ci sono tutte le foto che il programma usa col metodo class.getResource. Per le immagini gi� presenti nel workspace nessun problema. Il problema sorge quando un utente ne aggiunge una nuova, se clicco sul progetto e poi manualmente faccio "Refresh", poi quando riavvio il programma visualizzo l'immagine altrimenti no.
    Siccome il programma deve essere usato da un utente generico, egli non deve effettuare questa operazione non essendo un programmatore e non conoscendo eclipse. Inoltre stesso problema quando esporto il progetto in un file eseguibile, l� non posso nemmeno aggiornare manualmente perch� sono fuori da eclipse. Come posso fare? Esiste qualche linea di codice che aggiorna automaticamente? Mi andrebbe bene anche non un aggiornamento nell'immediato ma quando il programma viene chiuso e poi aperto. Ho cercato tanto su internet e ho trovato diverse linee di codice ma tutte mi davano errore!
    Tipo queste:

    codice HTML:
    IProject project = root.getProject(currentProjectName);
    project.refreshLocal(IResource.DEPTH_INFINITE, null);
    codice HTML:
    ResourcesPlugin.getWorkspace().getRoot().getProjects()
    Mi aiutate per favore?
    Grazie

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da raissa95 Visualizza il messaggio
    Allora nel mio progetto l'utente pu� inserire delle foto all'interno di una cartella chiamata images che si trova nel workspace. In questa cartella ci sono tutte le foto che il programma usa col metodo class.getResource. Per le immagini gi� presenti nel workspace nessun problema. Il problema sorge quando un utente ne aggiunge una nuova, se clicco sul progetto e poi manualmente faccio "Refresh", poi quando riavvio il programma visualizzo l'immagine altrimenti no.
    Ma questo non è il senso/modo corretto di trattare la questione! Questa qui è soltanto la "visione" che solo tu, da sviluppatore, hai del progetto e dell'ambiente di sviluppo. Non c'entra, non dovrebbe c'entrare nulla con ciò che dovrebbe accadere una volta che la tua applicazione dovesse "vivere" per conto suo fuori da un qualunque ambiente di sviluppo.

    Tra l'altro il principio delle risorse (come inteso dai getResource/getResourceAsStream) è da intendersi per la sola lettura, non per la scrittura (non esiste un es. writeResource o roba simile) e inoltre si utilizza tipicamente per quelle risorse (testi, immagini, audio ecc...) che fanno parte fissa della applicazione. Non per cose che sceglie l'utente in modo arbitrario.

    Oltretutto le risorse siccome vengono ricercate "in classpath", possono anche stare dentro lo stesso jar dove ci sono le tue classi Java. E a runtime un jar non dovrebbe essere modificato, potrebbe anche non essere possibile modificarlo tecnicamente per vari motivi di locking.

    Insomma, non è quello l'approccio giusto.

    Quote Originariamente inviata da raissa95 Visualizza il messaggio
    Siccome il programma deve essere usato da un utente generico, egli non deve effettuare questa operazione non essendo un programmatore e non conoscendo eclipse. Inoltre stesso problema quando esporto il progetto in un file eseguibile, l� non posso nemmeno aggiornare manualmente perch� sono fuori da eclipse. Come posso fare?
    L'applicazione dovrebbe semplicemente usare una directory "base" sotto cui memorizzare le immagini che l'utente intende caricare e gestire. E questa directory non deve (non dovrebbe) avere nulla a che fare con il tuo workspace, il tuo progetto, la tua "src" ecc...

    La scelta di questa directory si può fare in svariati modi:
    a) la può scegliere/imporre automaticamente la applicazione, magari basandosi su una qualche directory "notevole" come ad esempio la "home directory" dell'utente che è facilmente rintracciabile da una System property.
    b) la può scegliere l'utente in una fase iniziale di setup tramite un apposito "installer" (e chiaramente andrebbe poi configurata da qualche parte in modo che la applicazione la rintracci)
    c) la può scegliere sempre l'utente ma ad un primo avvio della applicazione, basandosi sul fatto che all'inizio manca un certo file di configurazione e/o una determinata chiave di configurazione.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2016
    Messaggi
    31
    Quote Originariamente inviata da andbin Visualizza il messaggio
    La scelta di questa directory si può fare in svariati modi:
    a) la può scegliere/imporre automaticamente la applicazione, magari basandosi su una qualche directory "notevole" come ad esempio la "home directory" dell'utente che è facilmente rintracciabile da una System property.
    b) la può scegliere l'utente in una fase iniziale di setup tramite un apposito "installer" (e chiaramente andrebbe poi configurata da qualche parte in modo che la applicazione la rintracci)
    c) la può scegliere sempre l'utente ma ad un primo avvio della applicazione, basandosi sul fatto che all'inizio manca un certo file di configurazione e/o una determinata chiave di configurazione.
    Come faccio a usare la tua prima proposta? Mi sembra la meno complicata.. Non so proprio da dove partire, sono in alto mare... Per favore

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da raissa95 Visualizza il messaggio
    Come faccio a usare la tua prima proposta?
    La questione innanzitutto è su cosa basarsi. La tua applicazione potrebbe girare su Windows, su Linux, su Mac ... non lo so. Quindi: a) non puoi schiantare un path assoluto nel codice, b) non puoi pensare di poter scrivere ovunque ti pare sul disco.

    Generalmente è tipico basarsi sulla "home" directory dell'utente, che è un concetto generico e presente su credo tutti i sistemi (non ho esperienza personale con i Mac ma la home directory esiste di certo anche lì).
    Sotto la home directory molte applicazioni tipicamente tengono dati e configurazioni varie. E tipico che una applicazione crei sotto la home una directory con nome nella forma .nomeapp (nota il punto iniziale). Sotto questa, la applicazione mette e struttura file e directory come gli pare.

    In Java la home directory si rintraccia con la System property "user.home". A livello di codice bastano poche righe:

    codice:
    File appConfDir = new File(System.getProperty("user.home", ".nometuaapp");
    File appImagesDir = new File(appConfDir, "images");
    appImagesDir.mkdirs();

    mkdirs() assicura che la catena di directory venga creata (se una o più cartelle non esistessero). Nota: restituisce un boolean, andrebbe testato.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2016
    Messaggi
    31
    Quote Originariamente inviata da andbin Visualizza il messaggio
    La questione innanzitutto � su cosa basarsi. La tua applicazione potrebbe girare su Windows, su Linux, su Mac ... non lo so. Quindi: a) non puoi schiantare un path assoluto nel codice, b) non puoi pensare di poter scrivere ovunque ti pare sul disco.

    Generalmente � tipico basarsi sulla "home" directory dell'utente, che � un concetto generico e presente su credo tutti i sistemi (non ho esperienza personale con i Mac ma la home directory esiste di certo anche l�).
    Sotto la home directory molte applicazioni tipicamente tengono dati e configurazioni varie. E tipico che una applicazione crei sotto la home una directory con nome nella forma .nomeapp (nota il punto iniziale). Sotto questa, la applicazione mette e struttura file e directory come gli pare.

    In Java la home directory si rintraccia con la System property "user.home". A livello di codice bastano poche righe:

    codice:
    File appConfDir = new File(System.getProperty("user.home", ".nometuaapp");
    File appImagesDir = new File(appConfDir, "images");
    appImagesDir.mkdirs();

    mkdirs() assicura che la catena di directory venga creata (se una o pi� cartelle non esistessero). Nota: restituisce un boolean, andrebbe testato.
    Ho inserito quel codice nel main ed effettivamente mi ha creato la cartella images nella cartella col mio nome utente. Al posto di .nometuaapp ho messo .discipline ma questa invece dove sta? Io appena apro utente vedo solo images. Comunque adesso che ho la mia directory, nel momento in cui aggiungo una nuova disciplina, la mia immagine deve finire l� e da l� deve essere caricata, corretto?
    Ora, io col filechooser seleziono l'immagine e la copio in images, ma mi serve il percorso di images per poterlo fare... Come lo ricavo? Non posso mettere il mio perch� sarebbe appunto diverso per altri utenti... Grazie ancora

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da raissa95 Visualizza il messaggio
    Ho inserito quel codice nel main ed effettivamente mi ha creato la cartella images nella cartella col mio nome utente. Al posto di .nometuaapp ho messo .discipline ma questa invece dove sta? Io appena apro utente vedo solo images.
    Scusa ... vedo adesso, ho scritto al volo il codice prima ma manca una parentesi

    Questo è corretto:

    File appConfDir = new File(System.getProperty("user.home"), ".nometuaapp");
    File appImagesDir = new File(appConfDir, "images");
    appImagesDir.mkdirs();


    P.S. cerca anche di capire il senso di queste costruzioni di File.

    Quote Originariamente inviata da raissa95 Visualizza il messaggio
    Comunque adesso che ho la mia directory, nel momento in cui aggiungo una nuova disciplina, la mia immagine deve finire l� e da l� deve essere caricata, corretto?
    Ora, io col filechooser seleziono l'immagine e la copio in images, ma mi serve il percorso di images per poterlo fare... Come lo ricavo? Non posso mettere il mio perch� sarebbe appunto diverso per altri utenti... Grazie ancora
    L'utente con il file chooser ti può specificare un qualunque percorso ad una immagine, potenzialmente ovunque nel file-system (o addirittura da altro disco). Spetta a TE copiare il file immagine nella "images" nota alla applicazione.
    C'è solo una questione: le immagini staranno TUTTE direttamente nella images o pensi di strutturarle tramite una qualche logica di suddivisione per directory?? Questo idem spetta a TE.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2016
    Messaggi
    31
    Sisi mi ero accorta della parentesi e avevo sistemato. Le mie domande sono 2:
    1) .discipline cosa rappresenta? cioè mentre images è la cartella che viene creata nel mio percorso utente, discipline invece dove sta? cosa è?
    2) sisi come hai detto tu uso un filechooser che mi seleziona l'immagine che si può trovare ovunque, poi io prendo quel file e lo devo copiare nella cartella images e lo so fare solo che mi serve il percorso di images, come lo ricavo? Mi serve proprio il percorso.
    Comunque rispondendo alla tua domanda, voglio mettere tutte le immagini delle discipline dentro images e basta, non voglio complicare le cose, anche perchè sono le uniche immagini che può gestire l'utente, il resto è fisso.

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da raissa95 Visualizza il messaggio
    1) .discipline cosa rappresenta? cioè mentre images è la cartella che viene creata nel mio percorso utente, discipline invece dove sta? cosa è?
    Su Windows la home di un utente è qualcosa es. C:\Users\Andrea

    Quindi con il pezzo di codice mostrato, otterresti una directory es.:

    C:\Users\Andrea\.discipline\images

    Sotto la home ci possono essere svariate cartelle .qualcosa (di altre applicazioni). Quindi un .discipline distingue la TUA applicazione. Sotto la tua directory, ovviamente ci fai e metti quello che vuoi. E una "images" può essere inutile o utile a seconda di cosa eventualmente altro ci potresti voler mettere.

    Quote Originariamente inviata da raissa95 Visualizza il messaggio
    2) sisi come hai detto tu uso un filechooser che mi seleziona l'immagine che si può trovare ovunque, poi io prendo quel file e lo devo copiare nella cartella images e lo so fare solo che mi serve il percorso di images, come lo ricavo?
    Il pezzo di codice che ti ho mostrato ti fornisce un java.io.File (che è solo un pathname) della directory "images".
    Questo lo puoi usare per creare un altro File che rappresenta un file composto con:

    File imgFile = new File(appImagesDir, "blabla.png");

    Ovviamente "blabla.png" è come esempio. Nel tuo caso il nome base+estensione ti arriverà dal file chooser.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2016
    Messaggi
    31
    Grazie infinite, ci sono riuscita! Mi sono resa conto della grandissima cretinata che avevo detto nel post iniziale! Grazie ancora per la tua disponibilita'

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.