Come posso cambiare l’icona dell’applicazione predefinita in Java?

Sto usando NetBeans, cercando di cambiare la familiare icona 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 sostengono di avere una soluzione, ma finora nessuno di loro funziona.

Ecco cosa ho in questo 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 class che contiene questo codice si trova nel pacchetto com.xyz , se questo fa alcuna differenza. Quella class estende anche JFrame. Questo codice lancia una MalformsdUrlException sulla prima riga.

Qualcuno ha una soluzione che funziona?

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

Può o non può richiedere un ‘/’ nella parte anteriore del percorso.

Puoi semplicemente andare a Netbeans, nella vista di progettazione, andare alla proprietà JFrame , scegliere la proprietà dell’immagine dell’icona, Scegli la proprietà iconImage Set Form usando: “Custom code” e poi 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 class e non hai bisogno di tutte le informazioni sul pacchetto / percorso nella stringa stessa.

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

In questo modo se sposti la class in un pacchetto diverso, non devi trovare tutte le stringhe, basta spostare la class e la sua directory di 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 class 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, distribuzioni Windows e Linux come Ubuntu usano icone diverse in Taskbar e 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 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 }