Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2014
    residenza
    Padova
    Messaggi
    361

    Problema con ClassLoader e package

    Salve a tutti, spero di non scrivere una banalità assoluta, ma non riesco a trovare la soluzione al mio problema

    Ho appena suddiviso i file della mia applicazione in packages, e non riesco a caricare le immagini utilizzando ClassLoader.

    Questa è la struttura di cartelle:

    -> Scacchi
    -> img
    -> src
    -> chess
    -> classi principali e altri packages....
    -> Preferenze.txt

    Per compilare ed eseguire la classe principale mi posiziono all'interno della directory src, ad esempio compilo con:

    codice:
    C:\.......\Scacchi\src>javac chess/Main.java

    Ho notato che compilare dalla cartella al livello superiore modifica i path relativi: ad esempio per leggere il file Preferenze.txt (all'interno della cartella Scacchi) da una classe all'interno della cartella chess, il percorso corretto è "../Preferenze.txt".

    Tuttavia ottengo un NullPointerException quando provo a caricare un'immagine, che si trova nella cartella img, con ClassLoader.getSystemResource(), usando questo codice :

    codice:
    Box b=Box.createHorizontalBox();
    b.add(new JLabel(new ImageIcon(ClassLoader.getSystemResource("../img/63.png"))));
    // anche così non riesco 
    // b.add(new JLabel(new ImageIcon(ClassLoader.getSystemResource("../../img/63.png"))));

    La classe che prova a caricare l'immagine si trova sempre all'interno della cartella chess.
    Come potrei risolvere?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Ansharja Visualizza il messaggio
    -> Scacchi
    -> img
    -> src
    -> chess
    -> classi principali e altri packages....
    -> Preferenze.txt

    codice:
    b.add(new JLabel(new ImageIcon(ClassLoader.getSystemResource("../img/63.png"))));
    // anche così non riesco 
    // b.add(new JLabel(new ImageIcon(ClassLoader.getSystemResource("../../img/63.png"))));
    No, non va granché bene. Le risorse dovrebbero stare in un package ben specifico e possibilmente quello dove ci sono le classi che le usano o magari un sotto-package.

    Per chiarire: se hai una classe es. com.esempio.gui.ApplicationFrame allora potresti mettere sotto "gui" un altro package es. "resources" e poi fare:

    new ImageIcon(ApplicationFrame.class.getResource("reso urces/xyz.png"))

    In questo modo la specifica è relativa al package di ApplicationFrame. E tra l'altro, se dovessi rinominare i package "a monte", continuerebbe a funzionarti tutto.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2014
    residenza
    Padova
    Messaggi
    361
    Ok grazie, modificherò tutta la disposizione

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.