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

Javafx无法加载新添加的图像

晋安国
2023-03-14

这是我的代码:

controller.java

package sample

import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;


public class Controller {
    @FXML
    Button button;
    @FXML
    TextField text;

    @FXML
    ImageView iv;

    public void handleBtn()
    {
        String name = text.getText();
        String address = "./res/"+name+".png";
        Image image = new Image(address);
        iv.setImage(image);
    }

}

main.java

package sample;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception{
        Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
        primaryStage.setTitle("Hello World");
        primaryStage.setScene(new Scene(root, 300, 275));
        primaryStage.show();
    }


    public static void main(String[] args) {
        launch(args);
    }
}
<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.Button?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.AnchorPane?>


<AnchorPane prefHeight="387.0" prefWidth="481.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8.0.171" fx:controller="sample.Controller">
   <children>
      <TextField fx:id="text" layoutX="41.0" layoutY="64.0" />
      <Button fx:id="button" layoutX="64.0" layoutY="169.0" mnemonicParsing="false" onAction="#handleBtn" text="Button" />
      <ImageView fx:id="iv" fitHeight="261.0" fitWidth="209.0" layoutX="222.0" layoutY="56.0" pickOnBounds="true" preserveRatio="true" />
   </children>
</AnchorPane>

当我运行我的项目并在文本字段中键入1并单击按钮时,它将显示图片。现在,在不关闭程序的情况下,我将一个2.png文件添加到res文件夹中。并在文本字段中键入2。点击该按钮后,它给我“java.lang.IllegalArgumentException:Invalid URL:Invalid URL或resource not Found”,并且无法加载图像。但如果我终止程序并重新运行它,键入2并单击按钮工作良好。

共有1个答案

邢鸿博
2023-03-14

这对我管用。

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class FxTemp extends Application {

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

    @Override
    public void start(Stage primaryStage) throws Exception {
        Image image = new Image("file:///home/username/Desktop/test.png");
        primaryStage.setTitle("animated");
        ImageView imageView = new ImageView(image);
        imageView.addEventHandler(MouseEvent.MOUSE_CLICKED, evt->{
            System.out.println("click");
            Image imager = new Image("file:///home/username/Desktop/test.png");
            imageView.setImage(imager);
        });
        StackPane root = new StackPane();
        root.getChildren().add(imageView);
        primaryStage.setScene(new Scene(root, 512, 512));
        primaryStage.show();
    }
}

如果我更改test.png并单击视图,我会看到新的图像。

你并不是真的应该被添加到你的‘资源’中,那些是你在执行之前提供的文件。Intellij会将文件复制到一个位置,并在类路径上使用该位置。然后可以通过getresource访问它们。

String nextImage = new File("./res/image.png").toURI().toString();
 类似资料:
  • 问题内容: 我测试了此代码以创建带有图像的对话框。 我将图像文件放入目录中。但是由于某些原因,图像无法显示。你能帮我纠正我的错误吗? 问题答案: 只需替换以下代码: 有了这个 Docu参考。 https://docs.oracle.com/javase/8/javafx/api/javafx/scene/image/Image.html 当您将a传递给该类时,可以用 四种不同的方式 处理( 从do

  • 为了创建带有图像的对话框,我测试了这段代码。 我将图像文件放入目录。但是由于某种原因,图像不显示。你能帮我改正错误吗

  • 我对javafx非常陌生,而且已经学会了使用代码教程进行测试时: 异常是由第行

  • 我在从控制器加载javaFX中的图像时遇到了一些麻烦。 我把一些图像放在src/文件夹中,甚至放在img/文件夹中,但仍然得到“无效URL或未找到资源”。 但我无法检索图像“java.lang.IllegalArgumentException:无效URL或未找到资源” 谢谢你的帮助

  • 无论我做什么来改变它,我都会不断得到这个错误。我对JavaFX非常陌生,我想尝试一个小程序。我只是想让一张照片出现在现场,但我甚至不能让图像加载到我的程序中。我将图像放在主包(seaapp)旁边的包(seaapp.images)中 这给了我一个错误: 当我添加一个图片的URL作为新图片时,这很好,但是当我有一个下载的图片时,它会给我这个错误。我的netbeans也完全更新了。我已经把我如何设置文件

  • 我的JavaFX项目可以在一台机器中加载图像,但是相同的代码不能在另一台机器中加载图像。 我有包结构(在src中)-/com/mypackagestructure/view/images/,它保存图像文件。 我的CSS文件位于-/com/mypackagestructure/view/Login。css 我在另一台机器上有完全相同的代码(安装了相同的操作系统、相同的Eclipse IDE和JDK/