Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    Visualizzare su JLabel dove si trova il file .jar

    Salve,
    sto implementando un programmino con interfaccia grafica che tra le altre cose genera un file di testo contenente uno script di output da passare a un programma CAD.
    Siccome il file viene generato nella stessa cartella del file .jar, vorrei visualizzare, premendo il JButton che crea il file di testo, anche la posizione dove si trova il file, in un JLabel dedicato...
    Sto cercando un metodo in grado di restituirmi il path del file (anche del .jar in esecuzione va bene, essendo la stessa cartella)...
    codice:
    LabelPath.setText("Script salvato in: " + ???);
    Vorrei sostituire a quei "???" il path in modo da dare una precisa informazione all'utente, quindi il percorso assoluto.
    Ultima modifica di Gas75; 26-02-2017 a 13:02 Motivo: Maggiori dettagli

  2. #2
    Ho trovato questo...
    codice:
    String path =Test.class.getProtectionDomain().getCodeSource().getLocation().getPath();
    String decodedPath =URLDecoder.decode(path,"UTF-8");
    Ma genera un errore nell'ActionPerformed(evt) del JButton che crea il file e dovrebbe anche visualizzare il path.

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da Gas75 Visualizza il messaggio
    codice:
    String path =Test.class.getProtectionDomain().getCodeSource().getLocation().getPath();
    String decodedPath =URLDecoder.decode(path,"UTF-8");
    Non servono questi truschini.

    codice:
    File f = new File("pippo.dat");
    String pathAssoluto = f.getAbsolutePath();

    java.io.File è perfettamente in grado di "risolvere" un percorso relativo in uno assoluto.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  4. #4
    C'è un piccolo inghippo, temo: il nome del file, per assicurarmi che non sia sovrascritto (viene salvato sempre nella cartella del file .jar), è parametrizzato sui dati di input. Devo vedere se posso comporre il nome del file anche in questo contesto.

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da Gas75 Visualizza il messaggio
    C'è un piccolo inghippo, temo: il nome del file, per assicurarmi che non sia sovrascritto (viene salvato sempre nella cartella del file .jar), è parametrizzato sui dati di input. Devo vedere se posso comporre il nome del file anche in questo contesto.
    Non ha molta importanza se è "cablato" nel sorgente (come nel mio breve esempio) o determinato/inserito in altro modo: se è relativo (alla directory corrente), java.io.File SA risolverlo.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  6. #6
    Persiste l'errore sul JButton.
    codice:
    ButtonCAD.setFont(new java.awt.Font("Tahoma", 0, 12));
    ButtonCAD.setText("CREA LO SCRIPT");
    ButtonCAD.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            ButtonCADActionPerformed(evt); // errore segnalato qui
        }
     });
    unreported exception UnsupportedEncodingException; must be caught or declared to be thrown

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da Gas75 Visualizza il messaggio
    codice:
    ButtonCADActionPerformed(evt); // errore segnalato qui
    E che vuol dire? Come facciamo a sapere cosa fa questo ButtonCADActionPerformed ??
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  8. #8
    Questo è il blocco di istruzioni di quel JButton.
    codice:
    private void ButtonCADActionPerformed(java.awt.event.ActionEvent evt) throws UnsupportedEncodingException {
        PrintWriter writer = null;
            try {
                writer = new PrintWriter("Radici(" + grado + ")" + reale + "+" + img + "i.scr", "UTF-8");
                writer.println("_pline");
                for (int i = 0; i < soluzioniR.size(); i++) {
                    writer.println(soluzioniR.get(i) + "," + soluzioniI.get(i));
                }
                writer.println("ch");
                writer.close();
            } catch (FileNotFoundException ex) {
                Logger.getLogger(RadiciNdiCGUI.class.getName()).log(Level.SEVERE, null, ex);
            } catch (UnsupportedEncodingException ex) {
                Logger.getLogger(RadiciNdiCGUI.class.getName()).log(Level.SEVERE, null, ex);
            } finally {
                writer.close();
            }
            File f = new File("Radici(" + grado + ")" + reale + "+" + img + "i.scr");
            String pathAssoluto = f.getAbsolutePath();
            LabelPath.setText("Script salvato in: " + pathAssoluto);
        }
    I try-catch sono scritti da NetBeans.

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da Gas75 Visualizza il messaggio
    Questo è il blocco di istruzioni di quel JButton.
    Beh, ora è ovviamente chiaro: ButtonCADActionPerformed dichiara di lanciare fuori UnsupportedEncodingException (eccezione "checked") ma tu questo metodo lo richiami da actionPerformed che non dichiara (e NON potrebbe farlo) quella eccezione. Insomma, il compilatore capisce che "a monte" di ButtonCADActionPerformed non c'è né gestione (cattura) né possibilità di uscita della eccezione e pertanto lo segnala come errore di compilazione.

    Soluzione? Il UnsupportedEncodingException è relativo al concetto del encoding ma tu hai specificato UTF-8 che è sicuramente supportato (da specifiche Java!) quindi ci si aspetta che con quel "UTF-8" fisso la UnsupportedEncodingException NON verrà mai ragionevolmente lanciata. Pertanto la soluzione è catturare UnsupportedEncodingException nel ButtonCADActionPerformed e nel caso dovesse mai davvero capitare (ma non capiterà poi mai) rilanci fuori un error "grave" come es. InternalError indicando che è successo qualcosa di davvero grave.

    Quote Originariamente inviata da Gas75 Visualizza il messaggio
    I try-catch sono scritti da NetBeans.
    E comunque scritto così non è nemmeno corretto al 100%. Prova a domandarti: se il costruttore di PrintWriter lanciasse una eccezione ... cosa succede? Prova a tracciare a mente ...
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  10. #10
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Pertanto la soluzione è catturare UnsupportedEncodingException nel ButtonCADActionPerformed e nel caso dovesse mai davvero capitare (ma non capiterà poi mai) rilanci fuori un error "grave" come es. InternalError indicando che è successo qualcosa di davvero grave.
    Non è quello che succede nel codice attuale? Il catch di UnsupportedEncodingException sta proprio nel ButtonCADActionPerformed.
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Prova a domandarti: se il costruttore di PrintWriter lanciasse una eccezione ... cosa succede? Prova a tracciare a mente ...
    Sinceramente la problematica non l'ho analizzata molto, sto focalizzando l'attenzione sull'altro problema...
    Non credo però che dal .jar vedrei qualcosa se PrintWriter lanciasse eccezioni, a parte la non esecuzione delle istruzioni. Del resto non sto usando il file che mi genera come output delle eccezioni, ho necessità di dare all'utente uno script da importare in CAD. Forse dovrei aggiungere una JLabel per fargli visualizzare dei codici di errore, un po' come fanno le calcolatrici? Ma se i dati di input sono sempre nel "range" di validità per l'esecuzione delle varie istruzioni, perché dovrei temere delle eccezioni?

Tag per questa discussione

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 © 2024 vBulletin Solutions, Inc. All rights reserved.