当前位置: 首页 > 知识库问答 >
问题:

图像不显示在JavaFX ImageView中

丁茂
2023-03-14

我想在JavaFX的ImageView中显示图像。图像应该从SQLite数据库中获取,并在场景加载时显示。我使用以下代码片段从数据库获取代码,并在之前创建的ImageView中显示它。但是图像没有按预期显示。我做错了吗?P. S.我测试了改变路径在两个FileOutputStream和当读取文件从目录到src/image.jpg。但似乎没有什么奏效。但是当我手动将一个图像文件放在src目录中并尝试读取它时,它就像一个魅力。但是我想展示一张从数据库中提取的图像。

@FXML
private void loadEquipmentData() throws IOException {
    try{
        Connection conn = DatabaseConnection.getConnection();
        PreparedStatement checkStmt = conn.prepareStatement(selectEquipmentQuery);
        ResultSet rs = checkStmt.executeQuery();

        while(rs.next()){
            InputStream is = rs.getBinaryStream("Image");
            OutputStream os = new FileOutputStream(new File("image.jpg"));
            byte[] content = new byte[1024];
            int size = 0;
            while ((size = is.read(content)) != -1){
                os.write(content, 0, size);
            }
            os.close();
            is.close();

            File file = new File("file:image.jpg");
            image = new Image(file.toURI().toString());
            this.eq_img.setImage(image);
            this.eq_img.setPreserveRatio(true);
            this.eq_img.setFitWidth(318.0);
            this.eq_img.setFitHeight(253.0);
        }

    } catch (SQLException e) {
        e.printStackTrace();
    } catch (FileNotFoundException fnf) {
        fnf.printStackTrace();
    }

}

在将图像写入数据库时,我使用此代码选择图像。

private FileChooser fileChooser;
private File file;
private FileInputStream fis;

@FXML
void chooseFiles() throws FileNotFoundException {
    CommonStageSingleton stageSingleton = CommonStageSingleton.getInstance();
    Stage userStage = stageSingleton.getMainWindow();
    fileChooser = new FileChooser();
    fileChooser.getExtensionFilters().addAll(
            new FileChooser.ExtensionFilter("Image Files","*.jpg","*gif","*.jpeg","*.png")
    );

    file = fileChooser.showOpenDialog(userStage);
    if(file != null){
        fis = new FileInputStream(file);
        ta_imagePath.setText(file.getAbsolutePath());
    }
}

并将其输入数据库。

Connection conn = DatabaseConnection.getConnection();
PreparedStatement checkStmt = conn.prepareStatement(checkEquipmentQuery);
PreparedStatement st = conn.prepareStatement(insertEquipmentQuery);
st.setBinaryStream(12, (InputStream)fis, (int)file.length());

我可能做了一些事情来保存此图像,而不是将其保存为.jpg

共有1个答案

刘选
2023-03-14

@dan1st指出了我在这里缺少的东西。在写入数据库时,我使用了webp图像作为输入图像。JavaFX不支持webp图像类型。现在我用的是jpeg,到目前为止没有任何问题。

 类似资料:
  • 我创建了一个动态web项目,以便通过Servlet显示JSP(我不能使用任何类似Spring的框架…)。默认情况下,我构建的类放在Build/classes中,因此在我将输出文件夹更改为WebContent/WEB-INF/classes后,我的应用程序运行良好。之后,我将该项目转换为Maven项目。(我不记得我上次使用servlet/JSP时需要更改输出文件夹,那是3年前!)。 无论如何,现在我

  • 我试图从docker容器中使用OpenCV imshow GUI。我使用nvidia-docker启动容器,因为该容器包含GPU版本的Tensorflow 我试图显示的图像是使用MatplotLib显示的。我该如何纠正这一点呢?谢谢

  • 我尝试了一切,但图像不会显示,我试图缩小图像,但没有用,我试图改变路径,我试图更改图像的位置,但没有帮助,我试图在互联网上搜索,但什么都没有。 我看到的只是空白的图形用户界面,没有文本和图像。如果你能帮我,你会帮我一个大忙。 代码如下:

  • 我正在使用此代码显示图像 图片存在于storage\app\public\images上,但它没有显示在我的页面上,顺便说一句,我已经创建了php artisan storage:link

  • 我从django应用程序开始,并尝试在主页中显示图像。但是图像没有被显示。 我的settings.py: 我的网址.py: 我的home.html: 我得到文本显示而不是图像

  • 我有一个netbeansjavagui项目。它包含用于图像的java文件和文件夹。我的项目中最重要的一部分是通过单击按钮来显示图像,比如说单击“下一步”按钮。当我点击“下一步”按钮时,图像将从IMG文件夹中逐个显示。我将图像放在标签中,如下所示: 我运行了这个程序,到目前为止,它可以按照我的要求工作。 然后,我需要将项目创建到一个jar文件中。我使用Netbeans和这个来创建我的项目的JAR文件