ImageView在来自项目空间时不会显示图像

时间:2016-03-25 00:35:50

标签: javafx-8

所以,我是JavaFX的新手,作为项目的一部分,我试图使用ImageView来显示一些图像。在添加到我的实际项目之前,我设置了以下内容以确保我了解如何使用ImageViews。

我的控制器:

import javafx.fxml.FXML;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.stage.Stage;

public class TestController {


    @FXML
    ImageView imageView;

    Image image;

    public void start(Stage stage){
        /*
         * THIS WORKS! 
         * 
         *  image = new   Image("file:/C://Users//Owner//Pictures//MyProjectPhotos/picture.jpg");
         */

        //BUT THIS DOESN'T :(
        image = new   Image("file:/JavaFXPractice/photos/picture.jpg");

        imageView.setImage(image);

        imageView.setOnMouseClicked(me -> System.out.println("hello"));
    }

}

fxml:

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.VBox?>

<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity"
 minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" 
 xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1"    
 fx:controller="application.TestController">
   <children>
      <VBox layoutX="156.0" layoutY="88.0" prefHeight="272.0"    prefWidth="378.0">
         <children>
            <ImageView fx:id="imageView" fitHeight="276.0" fitWidth="378.0"   
             pickOnBounds="true" preserveRatio="true" />
          </children>
       </VBox>
    </children>
 </AnchorPane>

最后这个:

import java.io.IOException;
import javafx.application.Application;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception {

        FXMLLoader loader = new FXMLLoader();
        loader.setLocation(getClass().getResource("/view/TestPage.fxml"));
        AnchorPane root = (AnchorPane) loader.load();
        Scene scene = new Scene(root);

        primaryStage.setScene(scene);
        primaryStage.setResizable(false);
        primaryStage.show();

        TestController control = loader.getController();
        control.start(primaryStage);
    }

    public static void main(String[] args) {
        launch(args);
    }
}

我的问题出在TestController类中。正如您在多行注释(以及它下面的注释/代码行)中看到的那样,当我从本地计算机上获取图像时,图像会正确显示,但是当我从项目空间获取图像时,图像不会显示。我已经尝试了几个小时来解决这个问题,但每次我尝试从我的项目空间中检索任何照片时,ImageView上都没有显示任何内容。它不是null(图像也不是),并且没有报告错误。我也试过寻找答案,但到目前为止没有运气。

1 个答案:

答案 0 :(得分:1)

您可以像这样加载图片:

image = new Image(getClass().getResource("/photos/picture.jpg").toExternalForm());

在假设下,&#34;照片&#34;是项目根目录下的文件夹。此文件夹必须位于类路径中。根据您的IDE,这可以通过不同的方式实现。在Eclipse中,这可以通过将此文件夹放入&#34;源文件夹&#34;来实现。典型的结构是

project
   src
      ...
   res
      photos
         picture.jpg

其中&#34; src&#34;和&#34; res&#34;是源文件夹。