Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2016
    Messaggi
    12

    Aprire app Java e caricare file tramite doppia click su file

    Salve,
    Ho un'applicazione eseguibile scritta in Java con dei metodi per scrivere e leggere da file. Il formato generato dalla mia applicazione è .fabio .
    Da applicazione chiusa, vorrei poter cliccare due volte sul mio file e vedere la mia applicazione che si apre e carica il file; come fanno la maggior parte dei programmi.

    Come posso fare?
    Inoltre, come faccio a dire al sistema operativo di associare il mio formato con la mia applicazione?
    Grazie

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da fabioz96 Visualizza il messaggio
    Il formato generato dalla mia applicazione è .fabio .
    Da applicazione chiusa, vorrei poter cliccare due volte sul mio file e vedere la mia applicazione che si apre e carica il file; come fanno la maggior parte dei programmi.
    Java non c'entra niente su questo aspetto. Dipende e varia assolutamente da un Sistema Operativo all'altro. Su Windows la associazione estensione->comando è memorizzata nel registry. La puoi impostare "a mano" nel registry, la puoi impostare con tools/comandi vari e tramite qualunque forma di "scripting" che permetta di accedere al registry. Su altri S.O. non ho assolutamente idea.

    E comunque, ripeto, Java non c'entra niente e da codice Java non imposti proprio nulla, di per sé.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2016
    Messaggi
    12
    E ma come faccio a dire alla mia applicazione che deve caricare il file se è chiusa?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da fabioz96 Visualizza il messaggio
    E ma come faccio a dire alla mia applicazione che deve caricare il file se è chiusa?
    Il sistema operativo mantiene associazioni estensione->COMANDO. Comando vuol dire es. su Windows:
    .txt ----> %SystemRoot%\system32\NOTEPAD.EXE %1

    Dove %SystemRoot% si espande per la directory di Windows e %1 si espande per il documento che si vuole aprire (con doppio-click o altro modo).

    Nel tuo caso, il comando dovrà: avviare la JVM (java.exe) passando tutto il necessario per avviare la tua classe con il main.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Il sistema operativo mantiene associazioni estensione->COMANDO. Comando vuol dire es. su Windows:
    .txt ----> %SystemRoot%\system32\NOTEPAD.EXE %1

    Dove %SystemRoot% si espande per la directory di Windows e %1 si espande per il documento che si vuole aprire (con doppio-click o altro modo).

    Nel tuo caso, il comando dovrà: avviare la JVM (java.exe) passando tutto il necessario per avviare la tua classe con il main.

    Aggiungo... una volta che la JVM sarà avviata ed avrà caricato la tua classe, questa riceverà il percorso al file da aprire nel primo elemento del parametro "args" del main... a questo punto la tua applicazione dovrà semplicemente verificare se le è stato passato qualcosa oppure no e, in caso positivo, procedere al caricamento di quanto passato. Un esempio banale:

    codice:
    public static void main(String[] args) {
       if (args.length > 0) {
          // C'è almeno un parametro... il primo sarà il file da aprire
          File fileDaAprire = new File( args[0] );
          ...
       } else {
          // L'applicazione è stata avviata senza alcun file da aprire
          ...
       }
    }

    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

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2016
    Messaggi
    12
    Grazie mille, adesso provo ��

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da fabioz96 Visualizza il messaggio
    Grazie mille, adesso provo ��
    Per chiarire: su Windows la associazione delle estensioni alle applicazioni è "spezzata" in due parti, non è diretta.
    Prima una estensione è associata ad un nome fittizio (un nome "logico", per così dire), es. .txt -----> txtfile
    Poi c'è un'altra associazione dal nome fittizio al comando, es. txtfile -----> ...comando....

    Sempre su Windows (tutti i più recenti, non so dire precisamente da quale release), ci sono i comandi assoc e ftype, vedi:

    https://technet.microsoft.com/en-us/.../bb490865.aspx
    https://technet.microsoft.com/en-us/.../bb490912.aspx

    Prova questi comandi da prompt (non cambia o tocca nulla, tranquillo):

    assoc .txt

    poi

    ftype txtfile
    Ultima modifica di andbin; 30-03-2017 a 18:31
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2016
    Messaggi
    12
    Ho provato e funziona.
    L'unico problema:
    Per rendere il tutto automatico, ho scritto i comandi su un file .bat.
    Nella prima istruzioni passo il parametro tramite %0 (come già testato e funzionante da prompt) soltanto che dopo aver eseguito il bat, il mio programma anziché ricevere come Input il suo stesso percorso, riceve il percorso del file Bat appena eseguito.

    Sbaglio qualcosa nel creare il file Bat o nel passaggio dei parametri?

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da fabioz96 Visualizza il messaggio
    Per rendere il tutto automatico, ho scritto i comandi su un file .bat.
    Nella prima istruzioni passo il parametro tramite %0 (come già testato e funzionante da prompt) soltanto che dopo aver eseguito il bat, il mio programma anziché ricevere come Input il suo stesso percorso, riceve il percorso del file Bat appena eseguito.
    A livello di associazione estensione-nome-comando, il comando dovrebbe essere qualcosa del tipo:

    se devi avviare un jar "avviabile" (con il Main-Class nel manifest):

    C:\blablabla\java.exe -jar C:\blobloblo\tuaapp.jar %1

    (javaw.exe se non vuoi avere la console)


    Posta il tuo bat, così capiamo cosa volevi/vorresti fare.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  10. #10
    Utente di HTML.it
    Registrato dal
    May 2016
    Messaggi
    12
    Questo è il codice del mio .bat

    ftype fabfile=C:\Users\Fabio\Desktop\ProvaEstensione.exe %0
    assoc .fab=fabfile

    Questi due comandi, usati singolarmente nel prompt, associano l'estensione .fab al mio programma che però ho convertito in exe.
    Se avvio il file bat, tramite il codice %0 viene passato "C:\Users\Fabio\Desktop\File bat.bat".
    Se cambio il codice in %1, lui non passa niente.
    Probabilmente è sbagliato l'ultimo codice che non so come impostare.

    Il mio obiettivo è quello di automatizzare questa procedura di associazione del tipo .fab in modo da renderla possibile anche in altri PC senza istruzioni lente e noiose.

    Inoltre, posso applicare una procedura simile ai file .jar senza doverli convertire in .exe?

    PS:
    Questo è il mio codice di programma in java:

    codice:
    public class ProvaEstensione extends JFrame{
            
        private static final long serialVersionUID = -2325740079368374717L;
        private JLabel label;
        
        public ProvaEstensione(String etichetta){
            this.setSize(300,100);
            this.setVisible(true);
            this.setLocationRelativeTo(null);
            this.setResizable(false);
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            label = new JLabel(etichetta);
            this.add(label);
        }
        
        
        public static void main(String[] args) {
            @SuppressWarnings("unused")
            ProvaEstensione prova; 
            System.out.println(Arrays.toString(args));
            if( args.length == 0 ) 
                prova = new ProvaEstensione("Nessun Argomento");
            else{
                String s0 = "";
                for( String s:args)
                    s0 += s;        
                prova = new ProvaEstensione(s0);
            }            
        } 
    }
    Ultima modifica di LeleFT; 04-04-2017 a 10:09 Motivo: Aggiunti i tag CODE

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.