簡體   English   中英

JavaFX 圖像未在舞台上顯示

[英]JavaFX Image not showing in stage

我已經嘗試了很多次和幾種方法,但我不能讓我的形象在舞台上隨心所欲地展現出來。 我認為這可能與 java 查找資源的路徑有關,但我不確定,因為我剛剛開始使用可視化庫(在本例中為 JavaFX)。 這是我的目錄結構:

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

我需要檢索要呈現的myImage.jpg ,並且我嘗試了以下操作:

1)純fxml方法:

 <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) 同時使用 fxml 和 java。 使用fx:id="logo"聲明ImageView元素,並像這樣從StartPageController.java注入圖像:

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");
    }    

}

兩種方式都不會產生任何異常,我只是不顯示圖像。 我不知道該怎么做。 我將衷心感謝您的幫助。

更新:

第一的

我嘗試放棄建議的目錄結構,並將圖像文件放在StartPageController.java的同一文件夾中。 通過做

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

我沒有得到任何異常,但圖像沒有渲染,這表明我不是在尋找資源,而是渲染圖像。 可能是缺少任何圖書館嗎? 我在 Windows 8 環境中,使用 Netbeans 8.0。 再次感謝您的回答。

第二

我剛剛在 Netbeans 的項目屬性中停用了打包和分發應用程序。 現在圖像渲染正確,但我認為問題沒有解決,因為當我需要分發軟件時,它會重新出現。 請,仍然需要幫助! :)

我檢查了自己項目中的代碼,它適用於下面的代碼片段。 我已將其調整為您的示例

 this.logo = new ImageView(new Image(getClass().getResourceAsStream("/assets/img/myImage.jpg")));

我和你有同樣的錯誤。 因此,為了糾正它,將我的圖像放在與我的項目的“src”相同級別的資源文件夾中。 這是我的代碼,它有效。

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

如果你使用 Intellij 作為你的主編輯器,那么你可以將你的文件夾標記為“Resources”或者只是打開“Project Structure”->“Modules”->然后將你的圖像文件夾標記為“Resources”

希望這會幫助你。

在 java 應用程序中,文件系統File資源之間存在區別(在類路徑上,在 .jar 中)。

如果圖像是應用程序的一部分,並且是固定的、只讀的,如您的相對路徑所示,請使用資源。

但是,圖像必須在罐子內。

也許:

/src/assets/img/myImage.jpg

或使 /assets 也成為頂級源目錄。

然后/img/myImage.jpg (或在第一種情況下/assets/img/myImage.jpg

以編程方式不使用 File 而是使用 URL getClass().getResource("/img/myImage.jpg")getResourceAsStream

這個問題可以通過將圖標/圖片所在位置的文件夾名稱更改為“資源”來解決。 它必須在您當前的 src 文件夾中,這對我來說很好用(我遇到了同樣的問題)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM