File JAR e Immagini

di il
4 risposte

File JAR e Immagini

Ciao Ragazzi,

con NetBeans ho sviluppato un programma pienamente funzionante nel momento che premo il pulsante RUN dell'ambiente di sviluppo. Ora il mio programma prevede l'uso di librerie grafiche con pulsanti e contenuti personalizzati (led, pulsanti, ecc) che dall'ambiente di sviluppo vengono correttamente caricati. Purtroppo però appena creo il file jar, e lancio il programma dal file compilato, le immagini non vengono più caricate. So che c'è un discorso di path assolute e relative, ho googlato un po e, anche accedendo con
this.getClass().getResource("/Img/Led/").getPath();
non ricavo un ragno dal buco. Sotto potete trovare il codice della classe Leds.

Potreste darmi un aiutino per cortesia?? Dove sbaglio?

package GuestUserInterface;

import java.util.ArrayList;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;

    
/**
 *
 * @author Luca
 */
public class Leds
{
    private String path_folder=this.getClass().getResource("/Img/Led/").getPath();
    public static final String BLUE_LED = "Blue.png";
    public static final String GREEN_LED = "Green.png";
    public static final String GREY_LED = "Grey.png";
    public static final String ORANGE_LED = "Orange.png";
    public static final String PURPLE_LED = "Purple.png";
    public static final String RED_LED = "Red.png";
    public static final String YELLOW_LED = "Yellow.png";
    
    public static final int EVENT_MOUSE_CLICKED = 0;
    public static final int EVENT_MOUSE_ENTERED = 1;
    public static final int EVENT_MOUSE_EXITED = 2;
    public static final int EVENT_MOUSE_PRESSED = 3;
    public static final int EVENT_MOUSE_RELASED = 4;
    
    private static final int MOUSE_BUTTON_LEFT = 1;
    private static final int MOUSE_BUTTON_MIDDLE = 2;
    private static final int MOUSE_BUTTON_RIGHT = 3;
    
    private boolean default_state;
    private ArrayList<JLabel> al;
        
    public Leds(boolean default_state) 
    {
        this.al = new ArrayList<JLabel>(); 
        
        this.default_state = default_state;
        
        System.out.println(path_folder);
        
        JOptionPane.showMessageDialog(MainGui.frame, path_folder);
       
        
    }
    
    public void addComponent(String color_false, String color_true, int x, int y)
    {
        
        String path_image_false = this.path_folder + color_false;
        String path_image_true = this.path_folder + color_true;
        
        ImageIcon iitre = new ImageIcon(path_image_true);
        ImageIcon iifls = new ImageIcon(path_image_false);
        
        int w = iitre.getIconWidth();
        int h = iitre.getIconHeight();
        
        JLabel jl = new JLabel();
        
        String name = Integer.toString((al.size() + 1));
        jl.setName(name);
        jl.setIcon(iitre);
        jl.setDisabledIcon(iifls);
        jl.setBounds(x, y, w, h);
        
        jl.setEnabled(default_state);
        
        al.add(jl);
    }
    
    public void setLedStatus(boolean state, int index)
    {
        JLabel jl;
        
        jl = al.get(index);
        jl.setEnabled(state);
        
        al.remove(index);
        
        al.add(index, jl);
    }
    
    public boolean getLedStatus(int index)
    {
        return al.get(index).isEnabled();
    }
    
    public int getListSize()
    {
        return al.size();
    }
    
    public ArrayList<JLabel> getLedList()
    {
        return this.al;
    }
    
    synchronized public JLabel getComponent(int index)
    {
        return al.get(index);
    }

    synchronized public void printLeds(JFrame jf)
    {
        JLabel jl = null;
        
        for(int scan=0; scan<al.size(); scan++)
        {
            jl = this.getComponent(scan);
            
            jf.add(jl);
        }
    }

    synchronized public void printLeds(JInternalFrame jiif) 
    {
        JLabel jl = null;
        
        for(int scan=0; scan<al.size(); scan++)
        {
            jl = this.getComponent(scan);
            
            jiif.add(jl);
        }        
    }
}
Grazie a tutti,
Ciao

4 Risposte

  • Re: File JAR e Immagini

    Non devi usare quel getPath(). ImageIcon ha un costruttore che riceve un java.net.URL e il getResource di Class restituisce proprio un URL. Usa quello senza manipolazioni.

    E visto che la specifica inizia con /Img allora vuol semplicemente dire che nel jar finale ci dovrà essere una cartella Img alla "radice".
  • Re: File JAR e Immagini

    Ciao,

    si ho controllato nel jar e la cartella img esiste. Cosa vuoi dire senza manipolazioni??

    Per caso intendi che non posso fare:
    String path_image_false = this.path_folder + color_false;
            String path_image_true = this.path_folder + color_true;
  • Re: File JAR e Immagini

    luca31989 ha scritto:


    Cosa vuoi dire senza manipolazioni??
    Che il java.net.URL restituito da getResource lo passi direttamente a ImageIcon, SENZA tentare getPath o altra trasformazione in String, File o altro.
  • Re: File JAR e Immagini

    Ciao,

    grazie mille, tutto funziona correttamente ora. Volevo chiederti ancora una "cosuccia". Io sto usando delle librerie particolari chiamate PI4J che ho inserito nella cartella libraries del mio progetto. Sapresti mica dirmi se nel momento in genero il file jar vengono copiate anche loro? se no, come posso fare?

    Grazie ancora per la pazienza
Devi accedere o registrarti per scrivere nel forum
4 risposte