这就是我尝试加载图片的方式
String imagePath = "/hive/pions/images/pionimages/" + pionColor + "/" + pionType + ".png";
pionImageView.setImage(new Image(getClass().getResourceAsStream(imagePath)));
我的包结构看起来像这样,这不是问题吧?并且“/”应该在linux中作为windows工作吗? 事情是它在Linux和Mac上工作,但不在Windows上。
JAR文件内容:
答案 0 :(得分:1)
不要使用Path类。并且不要使用File类。
Class.getResource和Class.getResourceAsStream的参数不是文件名;它是一个相对的URL。 URL 始终在所有平台上使用正斜杠(/
)作为文件分隔符。
执行Path.toString()时,您将获得适合您正在运行的平台的文件名。这意味着在Windows上,目录将由\
分隔。结果是一个String,它不是Class.getResourceAsStream的有效参数。
完全跳过使用Path:
String imagePath = "images/pions/" + pionColor + "/" + pionType + ".png";
答案 1 :(得分:1)
您需要使用/启动路径,使其相对于JAR根目录;否则它将与班级名称相关。
getClass().getResourceAsStream("image/foo")
将映射到com/example/packagename/image/foo
getClass().getResourceAsStream("/image/foo"
将映射到image/foo