Visualizzazione dei risultati da 1 a 10 su 10

Discussione: [Java] file jar

  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    24

    [Java] file jar

    ciao,ho un problema con i file .jar di java:
    quando creao il file con la sintassi:

    jar mfc MioManifest.mf NomeJar.jar sound pictures

    il tutto funziona,ma appena sposto il file jar creato in un'altra cartella non funziona più,cioè non mi carica i file che ci sono nelle cartelle che ho incluso nella creazione del jar(sound e pictures)
    questo (ho pensato) può significare 2 cose:
    o non so creare il file manifest
    o sbaglio a creare il jar

    di seguito riporto il mio manifest:

    Manifest-Version: 1.0
    Main-Class: ScacchiMain
    Name: ScacchiMain.class
    Class-Path: /sound /picture

    chi ha voglia e tempo per rispondermi lo faccia al più presto xkè sto impazzendo
    ciao!

  2. #2
    Io ho l'impressione che invece sia sbagliato il codice, nel senso che continui a caricare le risorse che si trovano fuori del JAR. Prova a sostituire un'immagine o un suono con un'altra dallo stesso nome
    Folle e' l'uomo che parla alla luna.
    Stolto chi non le presta ascolto.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    24

    ok

    hai perfettamente ragione ho provato e anche se nel jar includo i le cartelle di immagini e suoni,durante l'esecuzione mi va a prendere quelli nelle cartelle all'esterno e non quelli nel jar,come devo fare?
    io i miei file li dichiaro cosi:

    File prova=new File("sound/prova.wav");

    evidentemente sbaglio qualche cosa , la cartella sound è all'interno del classpath
    per creare il jar faccio cosi:

    jar mfc Manifest.mf Scacchi.jar scacchi pictures sound

    c'è un'altro modo? please help

  4. #4
    Io ancora non ho trovato un modo per ottenere un File generico da un Jar, se non usando routine che li leggono byte per byte.
    Per le immagini e i suoni dovrebbero esistere funzioni di comodo (che pero' non riesco a far funzionare nel caso generale in cui le immagini si trovino in una cartella diversa dai file .class!)
    Utilizzo le URL. Provando a dichiarare un file a partire dalla URL ottengo una bella NullPointerException, per cui...

    Questa e' la classe che uso per le immagini:

    codice:
     
     public static final ImageIcon loadPicture(String s) {
            try {
                return new ImageIcon(
                        new URL(MiaClasse.class.getClassLoader().getResource(BASE_PATH).toString() + '/' + s));
            } catch (Throwable t) {};
            return new ImageIcon ();
        }
    Dove MiaClasse e' la mia classe, non la tua BASE_PATH e' il percorso delle immagini rispetto al JAR (nel tuo caso credo sia "picture") ed "s" e' il nome del file.
    Il doppio return consente di far funzionare il programma anche se le immagini non vengono trovate. Se non ti va bene in questo modo, basta levarlo!
    Folle e' l'uomo che parla alla luna.
    Stolto chi non le presta ascolto.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    24
    ok funziona,anche se non ho capito bene come fai a costruire quell'url (non ci sarei mai arrivato)

    ora il problema si ripresenta con i file ,perchè questi non hanno un costruttore che accetta in ingresso una url
    ho provato invano sia con il costruttore che accetta una stringa sia con quello che prende URI ma o non sono capace io (e dato che quel giro di metodi che dalla classe mi prende il path non l'ho capito bene)o non si pole
    cheppalle sti problemini

    cmq ho pensato anche all'idea di rinunciare a mettere i file divisi per cartelle,ho provato la soluzione "tutti insieme nel jar" e non mi carica i file lo stesso( questo senza usare il metodo loadPicture che mi hai dato),è un mio ulteriore errore o è normale?


  6. #6
    Il giro di metodi che ho usato e' complesso, pero' funziona indipendentemente dal fatto di trovarsi o meno in un JAR, il che era poi quello che volevo ottenere.
    Il fatto che getClassLoader mi ritornasse la root anziche' la directory corrente l'ho scoperto per caso, provando i metodi uno per uno...
    Il problema e' che quando stai "dentro" il JAR non puoi fare getParent() per passare alla directory superiore.
    Se pero' metti le immagini nella stessa directory delle classi, allora dovrebbe bastare il classico getImage() della classe Toolkit.
    Folle e' l'uomo che parla alla luna.
    Stolto chi non le presta ascolto.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    24
    ok sono riuscito a farlo funzionare per bene però resta il problema dei File:
    il costruttore del file accetta una cosa come l'URI che non ho capito in cosa si differenzia dall'URL dato che dopo le mille prove fatte mi sembrano uguali (come percorsi dei file)
    eppure non mi riesce a caricare i file.wav che utilizzo per i suoni:


    codice:
    public static final File loadFile(String s) {
            try {
    			uri=new  URI(Sound.class.getClassLoader().getResource("sound").toString() + '/' + s);
                return new File(uri);
            } catch (Throwable t) {};
            return null;
        }
    	
    	
    		try{	
    			
    			File sf=loadFile("ale.txt");
    			if (sf!=null){
    				javax.swing.JOptionPane.showMessageDialog(null,"File audio trovati: "+uri,"ok",javax.swing.JOptionPane.INFORMATION_MESSAGE);
    				AudioFileFormat aff=AudioSystem.getAudioFileFormat(sf);
    				AudioInputStream ais_click=AudioSystem.getAudioInputStream(sf);
    				AudioFormat af=aff.getFormat();
    				DataLine.Info info=new DataLine.Info(Clip.class,ais_click.getFormat(),((int) ais_click.getFrameLength() *af.getFrameSize()));
    				click=(Clip) AudioSystem.getLine(info);
    				click.open(ais_click);
    {
    dammi una mano please ,grazie ciao

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Avendo un oggetto di tipo URL è facile ottenere il relativo file:
    codice:
    URL mioUrl = ...;
    
    File mioFile = new File( mioUrl.getFile() );
    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

  9. #9
    Putroppo, se l'URL si riferisce all'interno di un file JAR ottieni solo un puntatore a null.
    Folle e' l'uomo che parla alla luna.
    Stolto chi non le presta ascolto.

  10. #10
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    24
    ho usato la funzione in questo modo ma non funge:

    codice:
    public static final File loadFile(String s) {
            try {
    			URL url=new URL(Sound.class.getClassLoader().getResource("sound").toString() + '/' + s);
                return new File(url.getFile());
            } catch (Throwable t) {};
            return null;
        }
    è uguale a quella che mi ha suggerito dek ma la sua con le imageIcon funziona,la mia no!!! perchè????? i file sono messi nella cartella sound insieme alla cartella pictures!!!
    uffa.. :master:

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.