JavaFX Immagine non viene visualizzata in fase di

Ho provato diverse volte e in diversi modi ma non riesco a fare la mia immagine mostra sul palco come voglio. Penso che potrebbe ha a che fare con il percorso in cui java cerca le risorse, ma non sono sicuro, dato che ho appena iniziato con visual librerie (JavaFX in questo caso). Ecco la mia struttura di directory:

MyProject
 |_assets
 |  |_img
 |     |_myImage.jpg
 |
 |_some
 |_other
 |_folders
 |
 |_src
    |_ve
       |_org
          |_project
             |_MyProject.java
             |_StratPage.fxml
             |_StartPageController.java

Ho bisogno di recuperare myImage.jpg per il rendering, e ho provato le seguenti:

1) Puro fxml approccio:

<ImageView
     id="logo" 
     fx:id="logo"
     fitHeight="99.0" 
     fitWidth="99.0" 
     layoutX="14.0" 
     layoutY="18.0" 
     pickOnBounds="true" 
     preserveRatio="true">
         <image>
            <Image url="@../../../../assets/img/myImage.jpg" />
         </image>
</ImageView>

2) Utilizzando sia fxml e java. Dichiarando il ImageView elemento con fx:id="logo", e l’iniezione di immagine da StartPageController.java come questo:

public class StartPageController implements Initializable {

    @FXML
    private ImageView logo;


    @Override
    public void initialize(URL url, ResourceBundle rb) {
        this.logo = new ImageView("file:../../../../assets/img/myImage.jpg");
    }    

}

Né modo di produrre qualsiasi eccezione, ho solo non mostra l’immagine. Non ho idea di cosa fare. Vorrei davvero apprezzare il vostro aiuto.

AGGIORNAMENTI:

Primo

Ho provato a dare il proposta struttura di directory, e posto il file di immagine nella stessa cartella di StartPageController.java. Facendo

logo = new ImageView(new Image(getClass().getResourceAsStream("myImage.jpg")))

Non ricevo alcuna eccezione, ma l’immagine non è il rendering, che suggeriscono me non si tratta di trovare le risorse, ma sul rendering immagine. Potrebbe essere la mancanza di qualche libreria? Io sono in un ambiente Windows 8, utilizzando Netbeans 8.0. Grazie ancora per le vostre risposte.

Secondo

Ho appena disattivato il confezionamento e la distribuzione di app nelle proprietà del progetto in Netbeans. Ora le immagini sono correttamente il rendering, ma non considero il problema risolto, dal momento che quando ho bisogno di distribuire il software si ri emergere. Si prega di aiutare è ancora necessaria! 🙂

  • Puoi provare con this.logo = new ImageView("/assets/img/myImage.jpg");? Che dovrebbe iniziare la ricerca dalla radice della cartella.
  • Provato this.logo = new ImageView("/assets/img/myImage.jpg");, e ha generato un’Eccezione. Preppended file:, come questo: this.logo = new ImageView("file:/assets/img/myImage.jpg"); e si comportava come detto nella domanda. Non buttare qualsiasi eccezione, ma carica app correttamente, tranne per l’immagine, che non è la visualizzazione. Qualsiasi altra idea? Grazie per il vostro aiuto 🙂
InformationsquelleAutor Throoze | 2014-06-17

 

4 Replies
  1. 1

    Ho avuto lo stesso errore, come si. Quindi, per correggere messo la mia immagine nella cartella risorse allo stesso livello della “src” del mio progetto. Questo è il mio codice, e funziona.

    public void showImage() {
        try {
            Image image = new Image("resources/img/akonolingaMap.jpg");
            imageView.setImage(image);
            imageView.setCache(true);
        } catch (Exception e) {
            printStackTrace();
        }
    }
  2. 3

    Ho controllato il codice nel mio progetto e funziona con il frammento di seguito. Ho modificato per il tuo esempio

     this.logo = new ImageView(new Image(getClass().getResourceAsStream("/assets/img/myImage.jpg")));
    • Io sono di geting un NullPointerException: Input stream must not be null. Ho provato anche utilizzando "file:/assets/img/myImage.jpg", ma ha ottenuto l’eccezione di troppo. Da dove viene getResourceAsStream() cerca il file?
    • sei sicuro simulato la stessa struttura di directory che ho?
    • Prova a mettere i vostri beni nella cartella src cartella, funziona? (pulizia e costruire, giusto per essere sicuri)
  3. 0

    In un’applicazione java c’è una distinzione tra i file di sistema File e risorsa (sul percorso della classe, all’interno del .jar).

    Se l’immagine è parte integrante della domanda e fissa, di sola lettura, come il vostro percorso relativo suggerisce di utilizzare una risorsa.

    Però poi l’immagine deve essere all’interno del vaso.

    Forse:

    /src/assets/img/myImage.jpg

    o fare /attività di una sorgente superiore directory di troppo.

    Poi /img/myImage.jpg (o nel primo caso /assets/img/myImage.jpg)

    A livello di programmazione non fa uso di File, ma URL getClass().getResource("/img/myImage.jpg") o getResourceAsStream.

    • Ciao! grazie per la risposta! come faccio a fare /assets una sorgente di directory? la tua risposta è simile a Perneel, ma non funziona per me. Controllare i commenti in Perneel la risposta, per favore.
    • In eclipse: rinominare attività, fare clic destro progetto: Nuovo / Cartella di Origine: “attività”. Quindi spostare la cartella img. BTW il maven di costruire infrastrutture è grande in tutto Idi, e fornisce le migliori pratiche, la cartella di convenzioni.
    • O semplicemente aggiungere immobilizzazioni in src.
    • Potrebbe, per favore, fornire un collegamento a maven documentazione di buone pratiche?
    • Ho anche rinunciato avendo la proposta di struttura di directory, e posto il file di immagine nella stessa cartella di StartPageController.java. Facendo this.logo = new ImageView(new Image(getClass().getResourceAsStream("myImage.jpg"))) non ricevo l’eccezione, ma l’immagine non è il rendering, che suggeriscono me non si tratta di trovare le risorse, ma sul rendering. Potrebbe essere la mancanza di qualche libreria? Io sono in un ambiente Windows 8, utilizzando Netbeans 8.0. Grazie ancora per le vostre risposte.
    • Di cui sopra dovrebbe funzionare. Avvertenze: (1) come oposed per Windows, vasetti e altri sistemi operativi sono case-sensitive (2) getClass() deve consegnare una classe dallo stesso vaso; a volte è più sicuro usare un MyClassInJar.class.
    • Ci dispiace, Maven, tutorial, articoli e tale devi cercare te. P. S. controllare il prodotto .vaso con 7zip/WinZip per il file di immagine.

  4. 0

    Se si utilizza Intellij come editor principale, allora si potrebbe segnare la vostra cartella “Risorse”, o anche solo aprire “Struttura di Progetto” -> “Moduli” -> quindi contrassegnare la vostra immagine cartella “Risorse”

    Speranza che vi aiuterà.

Lascia un commento