Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [JAVA] problema caricamento file da jar

    ciao a tutti,

    ho appena finito lo sviluppo di un piccolo advertgame per pc fatto con java.

    brevemente è un gioco 2d isometrico con un gameplay tipo pac-man che gira fullscreen utilizzando il double buffering del framework.

    ho la necessità di distribuirlo su cdrom, su questo forum ho letto di un software che si chiama exe2j l'ho provato e mi pare la soluzione ideale.

    ho un problema però sulla lettura dei file .png delle immagini e dei file .txt

    questo è il metodo che uso per leggere tutti i file di testo:

    codice:
    public static String[] TextFromFile(String fileName)
    	{
        	try
    		{
    			InputStream is = new Loader().getClass().getResourceAsStream("/res/"+fileName+".txt"); 
    			StringBuffer str = new StringBuffer();
    			
    			byte b[] = new byte[1];
    			while ( is.read(b) != -1 )
    			{
    			    str.append(new String(b));
    			}
    			is.close();
    			
    			return str.toString().split("\n");
    		}
    		catch (IOException e)
    		{
    			System.out.println("IOException "+ fileName);
    			return new String[0];
    		}
    	}
    questa è la funzione che uso per caricare i png (aggiungo anche la funzione blockforimage che uso per attendere che il caricamento sia finito - _parent è il riferimento al Frame contenitore dell'applicazione):

    codice:
    //passo il percorso relativo dell'immagine e le dimensioni della singola texture
        public void loadTextureSet(String path, int textureSize, int textureSetIndex)
        {	
        	System.out.println("loadTextureSet: "+path);
        	try
        	{
        		//caricamento immagine
        		Image img = Toolkit.getDefaultToolkit().createImage(TextureFactory.class.getResource("/res/"+path)); 
        		blockForImage(img);
        		
        		//setup del set
        		_tSize = textureSize;
    			_textureSets[textureSetIndex] = new TextureSet(_parent, textureSetIndex);
    			_textureSets[textureSetIndex].init(img);
        	}
        	catch (Exception e)
        	{
        			System.out.println("****errore durante il caricamento dell'immagine****");
        			System.out.println(path);
        			e.printStackTrace();
        	}
        	
        }
    
        private void blockForImage(Image img) 
        {
            MediaTracker mt = new MediaTracker(_parent);
            try 
            {
                mt.addImage(img, 0);
                mt.waitForID(0);
            } 
            catch (InterruptedException e)
            {
                e.printStackTrace();
            }
        }
    tutto questo funziona se nella stessa posizione del jar ho la cartella delle risorse, ma non funziona con le risorse all'interno del jar.
    a questo punto non so se sia il mio jar che ha problemi o non è questo il modo giusto per caricare le risorse.

    il jar è così composto:

    +META-INF
    -manifest.mf
    +res
    -+level01
    ---files txt e png
    -+level02
    ---files txt e png
    -+level03
    ---files txt e png
    -files txt e png
    classi dell'applicazione

    any ideas???
    grazie!
    If you want a picture of the future, imagine a boot stamping on a human face-for ever.

  2. #2
    Ci provo :-) se tu vuoi prendere un JAR a runtime quindi dopo lo start dell'applicazione credo che dovresti usare questa classe java.util.jar.JarFile
    e i metodi getInputStream(ZipEntry ze) e getEntry(String name) per prelevare le risorse

    Ora se io ho capito bene e tu hai scelto questa strada mi verrebbe da dire di inserire tutto il progetto compreso le risorse in un unico jar.

    Se non ho capito il problema ignora il mio msg


    Ciao
    TonyTalk
    Gioca a The Empire Multiplayer online game...ispirato a Risiko ma con scenari ed opzioni rivoluzionarie
    http://www.multiplayergames.it
    http://utenti.lycos.it/the_empire

  3. #3
    interessante...
    no, non ho preso in considerazione di tenere le risorse in un jar diverso da quello dell'applicazione, potrebbe però essere un'idea.
    al momento però preferirei mantenere tutto in un unico file, visto che deve essere il più facile possibile farlo funzionare...

    grazie
    If you want a picture of the future, imagine a boot stamping on a human face-for ever.

  4. #4
    Originariamente inviato da daniele10100
    interessante...
    no, non ho preso in considerazione di tenere le risorse in un jar diverso da quello dell'applicazione, potrebbe però essere un'idea.
    al momento però preferirei mantenere tutto in un unico file, visto che deve essere il più facile possibile farlo funzionare...

    grazie
    Ok allora ignora quello che ho scritto prima in quanto pensavo che tu avessi usato un altro jar per le risorse.

    Ciao
    TonyTalk
    Gioca a The Empire Multiplayer online game...ispirato a Risiko ma con scenari ed opzioni rivoluzionarie
    http://www.multiplayergames.it
    http://utenti.lycos.it/the_empire

  5. #5
    Se puoi prova a sostituire al posto di
    codice:
    Image img = Toolkit.getDefaultToolkit().createImage(TextureFactory.class.getResource("/res/"+path)); 
    
    
    inserisci questa dovrebbe 
    Image img = Toolkit.getDefaultToolkit().createImage("res/"+path)); 
    
    
    e al posto di
    
    InputStream is = new Loader().getClass().getResourceAsStream("/res/"+fileName+".txt"); 
    
    
    prova questa
    FileInputStrem is= new FileInputStrem("/res/"+fileName+".txt");
    Io se ricordo bene ho sempre usato queste istruzioni per accedere alle risorse


    Anche se non credo sia questa il problema
    Ciao
    TonyTalk
    Gioca a The Empire Multiplayer online game...ispirato a Risiko ma con scenari ed opzioni rivoluzionarie
    http://www.multiplayergames.it
    http://utenti.lycos.it/the_empire

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.