Domanda

Sto usando NetBeans, provando a cambiare l'icona familiare della tazza di caffè Java in un file png che ho salvato in una directory di risorse nel file jar. Ho trovato molte pagine Web diverse che affermano di avere una soluzione, ma finora nessuna di esse funziona.

Ecco quello che ho al momento (tralasciando il blocco try-catch):

URL url = new URL("com/xyz/resources/camera.png");
Toolkit kit = Toolkit.getDefaultToolkit();
Image img = kit.createImage(url);
getFrame().setIconImage(img);

La classe che contiene questo codice è nel pacchetto com.xyz , se questo fa la differenza. Quella classe estende anche JFrame. Questo codice genera un'eccezione MalformedUrl sulla prima riga.

Qualcuno ha una soluzione che funziona?

È stato utile?

Soluzione

java.net.URL url = ClassLoader.getSystemResource("com/xyz/resources/camera.png");

Può richiedere o meno un '/' all'inizio del percorso.

Altri suggerimenti

Puoi semplicemente andare su Netbeans, nella vista di progettazione, vai alla proprietà JFrame , scegli la proprietà icon image, Scegli la proprietà iconImage di Set Form usando: " Codice personalizzato " e quindi nella funzione Form.SetIconImage () inserisci il seguente codice:

Toolkit.getDefaultToolkit().getImage(name_of_your_JFrame.class.getResource("image.png"))

Non dimenticare di importare:

import java.awt.Toolkit;

nel codice sorgente!

Oppure posiziona l'immagine in una posizione relativa a una classe e non hai bisogno di tutte quelle informazioni sul pacchetto / percorso nella stringa stessa.

com.xyz.SomeClassInThisPackage.class.getResource( "resources/camera.png" );

In questo modo se sposti la classe in un pacchetto diverso, non devi trovare tutte le stringhe, devi solo spostare la classe e la sua directory delle risorse.

Prova questa scrittura dopo

initcomponents();

setIconImage(Toolkit.getDefaultToolkit().getImage(getClass().getResource("Your image address")));
    /** Creates new form Java Program1*/
    public Java Program1() 


    Image im = null;
    try {
    im = ImageIO.read(getClass().getResource("/image location"));
    } catch (IOException ex) {
    Logger.getLogger(chat.class.getName()).log(Level.SEVERE, null, ex);
    }
    setIconImage(im);

Questo è quello che ho usato nella GUI in netbeans e ha funzionato perfettamente

In una classe che estende un javax.swing.JFrame usa il metodo setIconImage .

this.setIconImage(new ImageIcon(getClass().getResource("/resource/icon.png")).getImage());

Dovresti definire icone di varie dimensioni, le distribuzioni Windows e Linux come Ubuntu usano icone diverse nella barra delle applicazioni e in Alt-Tab.

public static final URL ICON16 = HelperUi.class.getResource("/com/jsql/view/swing/resources/images/software/bug16.png");
public static final URL ICON32 = HelperUi.class.getResource("/com/jsql/view/swing/resources/images/software/bug32.png");
public static final URL ICON96 = HelperUi.class.getResource("/com/jsql/view/swing/resources/images/software/bug96.png");

List<Image> images = new ArrayList<>();
try {
    images.add(ImageIO.read(HelperUi.ICON96));
    images.add(ImageIO.read(HelperUi.ICON32));
    images.add(ImageIO.read(HelperUi.ICON16));
} catch (IOException e) {
    LOGGER.error(e, e);
}

// Define a small and large app icon
this.setIconImages(images);

Esempio:

URL imageURL = this.getClass().getClassLoader().getResource("Gui/icon/report-go-icon.png");
ImageIcon iChing = new ImageIcon("C:\\Users\\RrezartP\\Documents\\NetBeansProjects\\Inventari\\src\\Gui\\icon\\report-go-icon.png");      
btnReport.setIcon(iChing); 
System.out.println(imageURL);

costruttore di frame interno

try{    
       setIconImage(ImageIO.read(new File("./images/icon.png")));   
   }
catch (Exception ex){
       //do something
   }

Puoi provare questo , funziona perfettamente:

`   ImageIcon icon = new ImageIcon(".//Ressources//User_50.png");
    this.setIconImage(icon.getImage());`
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top