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

    Non riesco ad esegiore il JAR creato...

    Salve. Avrei un problema: praticamente non riesco ad eseguire un file JAR che ho creato...

    Ho provato ad eseguire il JAR da console e mi da questi errori:


    Come è possibile notare si riferisce a due specifiche righe del mio sorgente:
    codice:
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    public class Pic extends JFrame
    {
    	private JButton next;
    	private JButton back;
    	private JLabel label;
    	private String[] names = new String[3];
    	private Icon[] pics = new Icon[3];
    	private int i;
    	public Pic()
    	{
    		super("My Java Window");
    		setSize(370,245);
    		setResizable(false);
    		setLocationRelativeTo(null);
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		setLayout(new FlowLayout());
    		
    		for (i=0;i<3;i++)
    		{
    			names[i] = "pic"+i+".jpg";
    		}
    		
    		for (i=0;i<3;i++)
    		{
    		riga 28:	pics[i] = new ImageIcon(getClass().getResource(names[i]));
    		}
    		i = 0;
    		
    		back = new JButton("Indietro");
    		back.setToolTipText("Immagine precedente");
    		add(back);
    		
    		label = new JLabel(pics[0]);
    		add(label);
    		
    		next = new JButton("Avanti");
    		next.setToolTipText("Immagine successiva");
    		add(next);
    		
    		ButtonHandler handler = new ButtonHandler();
    		next.addActionListener(handler);
    		back.addActionListener(handler);
    		
    		setVisible(true);
    	}
    	private class ButtonHandler implements ActionListener
    	{
    		public void actionPerformed(ActionEvent event)
    		{
    			if (event.getSource() == back)
    			{
    				if (i > 0)
    				{
    					i--;
    					label.setIcon(pics[i]);
    				}
    				else if (i == 0)
    				{
    					i = 2;
    					label.setIcon(pics[i]);
    				}
    			}
    			else if (event.getSource() == next)
    			{
    				if (i < 2)
    				{
    					i++;
    					label.setIcon(pics[i]);
    				}
    				else if (i == 2)
    				{
    					i = 0;
    					label.setIcon(pics[i]);
    				}
    			}
    		}
    	}
    	public static void main(String[] args)
    	{
    	//riga 83:	new Pic();
    	}
    }
    Ma se io eseguo il file .class principale da ms-dos, il programma funziona perfettamente... quindi, cosa c'è di sbagliato?? o_O Vi prego help me

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Non riesco ad esegiore il JAR creato...

    Originariamente inviato da Dreamer89
    jar cmf info.txt pic.jar *.class

    Ma se io eseguo il file .class principale da ms-dos, il programma funziona perfettamente... quindi, cosa c'è di sbagliato??
    Non hai messo la/le immagine/i nel jar.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3

    Re: Re: Non riesco ad esegiore il JAR creato...

    Originariamente inviato da andbin
    Non hai messo la/le immagine/i nel jar.
    Scusa ma come faccio ad aggiungerle?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Re: Re: Non riesco ad esegiore il JAR creato...

    Originariamente inviato da Dreamer89
    Scusa ma come faccio ad aggiungerle?
    jar cmf info.txt pic.jar *.class *.jpg
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5

    Re: Re: Re: Re: Non riesco ad esegiore il JAR creato...

    Originariamente inviato da andbin
    jar cmf info.txt pic.jar *.class *.jpg
    Quindi così facendo, le immagini diventano parti integranti del jar... non è possibile lasciare le immagini fuori e collegarle al jar?

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Re: Re: Re: Re: Non riesco ad esegiore il JAR creato...

    Originariamente inviato da Dreamer89
    Quindi così facendo, le immagini diventano parti integranti del jar... non è possibile lasciare le immagini fuori e collegarle al jar?
    Se sono immagini fisse che "fanno parte" della applicazione sarebbe più giusto metterle nel jar.

    Comunque la questione principale è che getResource() va a cercare le risorse usando il "classpath". Ma se avvii l'applicazione con java -jar file.jar, il classpath è composto solo dal file jar (più eventuali altri jar se fossero specificati nel manifest). In pratica ignora -classpath o la variabile CLASSPATH.
    Quindi non troverebbe le risorse, nemmeno se fossero nella stessa directory dove c'è il tuo jar.

    Sarebbe diverso se tu mettessi in classpath il file jar e la directory corrente:

    java -classpath .;pic.jar Pic

    in questo modo NON hai avviato il jar, l'hai solo messo in "classpath" e detto di avviare il main della classe Pic. In tal caso funzionerebbe.

    Se proprio vuoi aprire un file sul file-system, allora usa normalmente File ecc... Nel tuo caso basta usare il costruttore di ImageIcon che prende un String con il nome del file.
    Ma in tal caso occhio, se metti un nome relativo es. pic1.jpg, il nome è riferito alla "current working directory". Quindi devi assicurarti che il jar venga avviato facendo in modo che la directory corrente sia quella dove ci sono le immagini.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7

    Re: Re: Re: Re: Re: Re: Non riesco ad esegiore il JAR creato...

    Originariamente inviato da andbin
    Se sono immagini fisse che "fanno parte" della applicazione sarebbe più giusto metterle nel jar.

    Comunque la questione principale è che getResource() va a cercare le risorse usando il "classpath". Ma se avvii l'applicazione con java -jar file.jar, il classpath è composto solo dal file jar (più eventuali altri jar se fossero specificati nel manifest). In pratica ignora -classpath o la variabile CLASSPATH.
    Quindi non troverebbe le risorse, nemmeno se fossero nella stessa directory dove c'è il tuo jar.

    Sarebbe diverso se tu mettessi in classpath il file jar e la directory corrente:

    java -classpath .;pic.jar Pic

    in questo modo NON hai avviato il jar, l'hai solo messo in "classpath" e detto di avviare il main della classe Pic. In tal caso funzionerebbe.

    Se proprio vuoi aprire un file sul file-system, allora usa normalmente File ecc... Nel tuo caso basta usare il costruttore di ImageIcon che prende un String con il nome del file.
    Ma in tal caso occhio, se metti un nome relativo es. pic1.jpg, il nome è riferito alla "current working directory". Quindi devi assicurarti che il jar venga avviato facendo in modo che la directory corrente sia quella dove ci sono le immagini.
    Quindi se voglio collegare le immagini senza caricarle nel jar, dovrei usare un'altra funzione al posto di getResource()? Quale sarebbe?

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Re: Re: Re: Re: Re: Re: Non riesco ad esegiore il JAR creato...

    Originariamente inviato da Dreamer89
    Quindi se voglio collegare le immagini senza caricarle nel jar, dovrei usare un'altra funzione al posto di getResource()? Quale sarebbe?
    L'ho anche detto! Usa il costruttore di ImageIcon che riceve un String con il nome del file!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9

    Re: Re: Re: Re: Re: Re: Re: Re: Non riesco ad esegiore il JAR creato...

    Originariamente inviato da andbin
    L'ho anche detto! Usa il costruttore di ImageIcon che riceve un String con il nome del file!
    Uhm... perdonami ma è da poco che sto studiando java... potresti gentilmente farmi un esempio pratico semplice semplice? ^^

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Re: Re: Re: Re: Re: Re: Re: Re: Non riesco ad esegiore il JAR creato...

    Originariamente inviato da Dreamer89
    Uhm... perdonami ma è da poco che sto studiando java... potresti gentilmente farmi un esempio pratico semplice semplice? ^^
    pics[i] = new ImageIcon(names[i]);

    Anzi ... l'array dei nomi 'names' non ti servirebbe nemmeno (se non devi usarlo per altri motivi, è chiaro). Quindi:

    pics[i] = new ImageIcon("pic"+i+".jpg");
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.