了解java中的getsystemresource()

cuxqih21  于 2021-07-14  发布在  Java
关注(0)|答案(1)|浏览(185)

如何访问icon.png文件而不在classloader.getsystemresource()中指定整个路径“main/res/images/icon.png”?我想要像images/icon.png这样的东西。这是project explorer main.java:

package main.java.OOP20.alt.sim.View;

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

import java.awt.*;

public class Main extends Application {

    public static final double PROPORTION = 1.5;

    @Override
    public void start(final Stage primaryStage) throws Exception {
        final Dimension dimension = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        final double width = dimension.getWidth() / PROPORTION;
        final double height = dimension.getHeight() / PROPORTION;

        final Parent root=FXMLLoader.load(
            ClassLoader.getSystemResource("main/res/layouts/sample.fxml")
        );
        primaryStage.setTitle("Title");
        primaryStage.setScene(new Scene(root, width, height));
        primaryStage.getIcons().add(
            new Image(ClassLoader.getSystemResource("main/res/images/icon.png").toString())
        );
        primaryStage.show();
    }

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

wz8daaqr1#

您可以通过使用获取fxml或png文件的url Class<T>#getResource() . 应使用以下解决方案:
对于fxml文件:

Parent root = FXMLLoader.load(getClass().getResource("/layouts/sample.fxml"));

对于png文件:

primaryStage.getIcons().add(new Image(getClass().getResource("/images/icon.png").toString()));

注意:如果要从静态方法中的资源文件夹加载任何外部资源(fxml、png等),则必须使用 Main.class.getClass() 而不是 getClass() . 它保证资源将相对于该类加载,而不是相对于子类加载。

相关问题