【问题标题】:java images not loading correctly windows 10java图像无法正确加载Windows 10
【发布时间】:2016-09-01 12:44:42
【问题描述】:

这就是我尝试加载图像的方式

String imagePath = "/hive/pions/images/pionimages/" + pionColor + "/" + pionType + ".png";

pionImageView.setImage(new Image(getClass().getResourceAsStream(imagePath)));

我的包结构看起来像这样,这不会是问题吧?并且“/”应该在两个linux中都可以作为windows使用? 问题是它可以在 linux 和 mac 上运行,但不能在 windows 上运行。

JAR 文件内容:

【问题讨论】:

  • 您的包结构(pions/images),似乎与您的路径字符串“images/pions/”不匹配。
  • 很抱歉没有显示全图
  • 图片已更新。可能是因为我对 2 个包使用了相同的名称吗?
  • 我会尝试使用完整路径。
  • 要么使用Paths.get(somePath).toUri().toURL().toExternalForm()访问文件使用getClass().getResource...但不能同时使用

标签: java image javafx


【解决方案1】:

不要使用 Path 类。并且不要使用 File 类。

Class.getResource 和 Class.getResourceAsStream 的参数不是文件名;它是一个相对 URL。在所有平台上,URL总是使用正斜杠 (/) 作为文件分隔符。

当您执行 Path.toString() 时,您将获得一个适合您正在运行的平台的文件名。这意味着在 Windows 上,目录将由 \ 分隔。结果是一个字符串,它不是 Class.getResourceAsStream 的有效参数。

完全跳过使用路径:

String imagePath = "images/pions/" + pionColor + "/" + pionType + ".png";

【讨论】:

  • 即使这样做 String imagePath = "images/pionimages/" + pionColor + "/" + pionType + ".png"; pionImageView.setImage(new Image(getClass().getResourceAsStream(imagePath))); 我得到相同的结果
【解决方案2】:

您需要以 / 开头的路径,以便它相对于 JAR 根目录;否则它将与类名相关。

getClass().getResourceAsStream("image/foo") 将映射到 com/example/packagename/image/foo

getClass().getResourceAsStream("/image/foo" 将映射到 image/foo

【讨论】:

  • 由于某种原因仍然相同。路径现在看起来像这样String imagePath = "/game/pions/images/pionimages/" + pionColor + "/" + pionType + ".png";
  • /game/pions/ 是在 JAR 中还是在 CLASSPATH 的顶​​部?如果不是那将行不通。它不是文件名,它是 CLASSPATH 中的资源。
  • @Joey 屏幕上方没有“pionimages”
  • 我改名是因为我认为两次使用π介子会导致问题
  • @Joey 停止尝试随机字符串。查找 CLASSPATH 的基础或 JAR 的内容。仅使用 JAR 路径的完整前缀,或仅使用 CLASSPATH 基础右侧的路径。不要输入任何其他文件或文件夹名称。
猜你喜欢
  • 1970-01-01
  • 2023-03-15
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 2014-01-09
  • 1970-01-01
  • 1970-01-01
  • 2014-12-17
相关资源
最近更新 更多