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

    [JAVA]: Caricare immagini tramite path in un file XML

    Ciao a tutti e grazie in anticipo per l'aiuto!!!

    Ho un problema da 3 giorni e non riesco a venirne a capo. Sto facendo un videogame per un progetto universitario. Ho preparato un file xml dove inserisco il nome di un immagine ed il path, ho creato un readerXML e li metto in una hashmap con chiave=nome e valore=path;

    codice:
     public ImageProvider() {
            width = 0;
            height = 0;
            nomeImmagine = new HashMap<>();
            readerXML = new ReaderXML();
            readerXML.readerXmlImage();
            caricaImmagini = readerXML.getDatiCaricamentoImmagini();
            for (Map.Entry<String, String> entry : caricaImmagini.entrySet()) {
                String nome = entry.getKey();
                String path = entry.getValue();
                System.out.println("nome: " + nome);
                System.out.println("pathPrimaMappa: " + path);
                try {
                    imgURL = this.getClass().getResource("images" + File.separator + "menuImages" + File.separator + "menuPrincipale.jpg");
                    System.out.println("path:" + path);
                    System.out.println("imgURL"+ imgURL);
                    BufferedImage img = ImageIO.read(imgURL);
                    BufferedImage momentanea = getScaledImage(img, 500, 500);
                    nomeImmagine.put(nome, momentanea);
                } catch (IOException ex) {
                    Logger.getLogger(ImageProvider.class.getName()).log(Level.SEVERE, null, ex);
                }
    
            }
        }
    per caricare l'immagine se metto il path a mano come nell'esempo riportato sopra, funziona.
    Se inserisco la stringa path, che è quello preso dal file xml, non funziona e non crea l'url per poi caricare l'immagine e poterla resizare e inserire nella nuova mappa.

    Spero di essere riuscito a spiegarmi.
    Grazie per il tempo che mi dedicherete!!

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da salvodj88 Visualizza il messaggio
    codice:
    imgURL = this.getClass().getResource("images" + File.separator + "menuImages" + File.separator + "menuPrincipale.jpg");
    Innanzitutto faccio una premessa: la specifica della risorsa che hai fatto qui sopra non è nemmeno correttissima al 100%. Perché hai usato File.separator (su Windows è \ ).
    La documentazione di getResource è estremamente chiara: va usato solo ed esclusivamente / nella specifica della risorsa, in quanto questa specifica non è di per sé sul file system. La risorsa viene cercata lungo il "classpath", cosa che potrebbe anche implicare la ricerca dentro un jar.

    Quote Originariamente inviata da salvodj88 Visualizza il messaggio
    Ho preparato un file xml dove inserisco il nome di un immagine ed il path

    Se inserisco la stringa path, che è quello preso dal file xml, non funziona e non crea l'url per poi caricare l'immagine
    Innanzitutto bisognerebbe vedere come è fatto questo path nel XML, è "assoluto"? è relativo? Se è relativo, vuoi che lo sia rispetto (come lo è nel senso standard) alla directory "corrente"? O rispetto ad una tua directory "nota"?

    Una cosa è cercare es. "images/xyz.png" lungo il classpath tramite getResource/getResourceAsStream e un'altra cosa è specificare "images/xyz.png" sul file-system.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #3
    Grazie per la risposta.
    Nell'xml il path è proprio scritto in quel modo come nell'esempio..
    codice:
    "images" + File.separator + "menuImages" + File.separator + "menuPrincipale.jpg"
    è un copia ed incolla.

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da salvodj88 Visualizza il messaggio
    Nell'xml il path è proprio scritto in quel modo come nell'esempio..
    codice:
    "images" + File.separator + "menuImages" + File.separator + "menuPrincipale.jpg"
    Non ha senso mettere una cosa del genere letteralmente nel XML .... cioè presa così tutta insieme come stringa non puoi passarla a nessuna delle API standard!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  5. #5
    E come dovrei fare??? ho provato anche a mettere:
    codice:
    "images/menuImages/menuPrincipale.jpg"

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da salvodj88 Visualizza il messaggio
    E come dovrei fare??? ho provato anche a mettere:
    codice:
    "images/menuImages/menuPrincipale.jpg"
    Non so come è fatto in generale il tuo XML ma se avessi un attributo es.

    <xyz ...... path="images/menuImages/menuPrincipale.jpg">

    allora sì, come forma ha senso. Ma essendo un percorso relativo, ci possono essere diverse interpretazioni:
    a) è relativo alla directory "corrente" (non centrano getResource e il classpath).
    b) è relativo alla directory del documento XML (come caso particolare, può coincidere con a) ma ovviamente non è detto).
    c) "images" è da cercare lungo il classpath alla "radice".
    d) "images" è da cercare lungo il classpath relativo al package di una tua classe.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  7. #7
    allora ho una classe ImageProvider dove viene chiamato nel costruttore il readerXML e ne estrapola i dati da elaborare
    codice:
     public ImageProvider() {
            width = 0;
            height = 0;
            nomeImmagine = new HashMap<>();
            readerXML = new ReaderXML();
            readerXML.readerXmlImage();
            caricaImmagini = readerXML.getDatiCaricamentoImmagini();
            for (Map.Entry<String, String> entry : caricaImmagini.entrySet()) {
                String nome = entry.getKey();
                String path = entry.getValue();
                System.out.println("nome: " + nome);
                System.out.println("pathPrimaMappa: " + path);
                try {
                    imgURL = this.getClass().getResource("images" + File.separator + "menuImages" + File.separator + "menuPrincipale.jpg");
                    System.out.println("path:" + path);
                    System.out.println("imgURL"+ imgURL);
                    BufferedImage img = ImageIO.read(imgURL);
                    BufferedImage momentanea = getScaledImage(img, 500, 500);
                    nomeImmagine.put(nome, momentanea);
    //                for (Map.Entry<String, BufferedImage> entry1 : nomeImmagine.entrySet()) {
    //                    String string = entry1.getKey();
    //                    BufferedImage bufferedImage = entry1.getValue();
    //                    System.out.println("nome: " + string + " bufferedImage: " + bufferedImage);
    //                }
                } catch (IOException ex) {
                    Logger.getLogger(ImageProvider.class.getName()).log(Level.SEVERE, null, ex);
                }
    
            }
        }
    la classe readerXML che legge il file XML

    codice:
      public void readerXmlImage() {
            try {
                DocumentBuilderFactory documentFactory = DocumentBuilderFactory.newInstance();
                DocumentBuilder builder = documentFactory.newDocumentBuilder();
                Document document = builder.parse(new File("./src/it/igpe/hookBoxingGUI/Immagini.xml"));
                NodeList immagine = document.getElementsByTagName("Immagine");
    //            System.out.println("Totale persone: " + immagine.getLength());
                for (int i = 0; i < immagine.getLength(); i++) {
                    Node nodo = immagine.item(i);
                    if (nodo.getNodeType() == Node.ELEMENT_NODE) {
                        Element persona = (Element) nodo;
                        String path = persona.getElementsByTagName("Path").item(0).getFirstChild().getNodeValue();
                        String nome = persona.getElementsByTagName("Nome").item(0).getFirstChild().getNodeValue();
                        this.datiCaricamentoImmagini.put(nome, path);
    //                    System.out.println("Nome: " + nome);
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    e questo è l'xml :

    codice:
    <root>
        <Immagine>
            <Path>
               "images/menuImages/menuPrincipale.jpg"
            </Path>
            <Nome>
                "menu" 
            </Nome>
        </Immagine>
    </root>
    il percorso non è relativo in base a dove viene chiamato il path?? quindi dove è il .class dell'imageprovider o comunque nel package dove è il .java dell'imageprovider?

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da salvodj88 Visualizza il messaggio
    codice:
            <Path>
               "images/menuImages/menuPrincipale.jpg"
            </Path>
            <Nome>
                "menu" 
            </Nome>
    Innanzitutto la quotazione così con " " è poco adatta e anche molto scomoda! Se prendi l'intero nodo di testo hai oltretutto i vari spazi e newline attorno, quindi per prima cosa dovresti trimmare la stringa e poi eliminare pure la quotazione.

    Quote Originariamente inviata da salvodj88 Visualizza il messaggio
    il percorso non è relativo in base a dove viene chiamato il path?? quindi dove è il .class dell'imageprovider o comunque nel package dove è il .java dell'imageprovider?
    Se usi getResource sul Class della tua classe ImageProvider e la specifica inizia con images (senza / iniziale), allora certo, "images" è intesa relativa al package di ImageProvider.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  9. #9
    E come dovrei modificare quindi il reader e l'xml?? purtroppo su xml non so moltissimo..

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da salvodj88 Visualizza il messaggio
    E come dovrei modificare quindi il reader e l'xml?? purtroppo su xml non so moltissimo..
    I dati va anche bene metterli come nodi di testo "figli" dei tuoi tag <Path> e <Nome> ma ... senza quotazione!
    Cioè:

    codice:
            <Path>
               images/menuImages/menuPrincipale.jpg
            </Path>
            <Nome>
                menu
            </Nome>

    E se accetti questa forma più "ampia" in cui ci possono essere spazi/newline attorno al tuo dato, allora devi solo ricordarti di fare un trim() sulla stringa che prendi dal XML.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java 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 © 2024 vBulletin Solutions, Inc. All rights reserved.