【问题标题】:Referencing an image inside a jar file when running junit运行 junit 时引用 jar 文件中的图像
【发布时间】:2015-10-29 09:02:40
【问题描述】:

我一直在尝试使用 ImageMagic (im4java) 来比较已知的好页面呈现与存储的好页面。

我已经在一个测试站点上进行了这项工作,但是我所有的图像(好的、坏的和不同的)都存储在我的 c:\temp 文件夹中。我一直在玩弄将“预期”图像保存在项目文件夹结构中的想法,因此当项目被签出时,预期图像就在那里。

(不是说这是一个很好的解决方案,这只是我一直在玩的东西。)

所以我的测试存储在 /src/test/java/my.screen.test/compareTest.java 我有我的“预期”形象 /masterImages/test.png

我尝试了各种方法来引用这个:

我在构建路径中包含了 masterImages,然后尝试使用 InputStream 输入 = getClass().getResourceAsStream("/masterImages/googleHomePage1.png"); (然后我想我可以简单地使用 input.toString() 传递给 im4java - 但是 InputStream 给了我空指针异常) 我还尝试从构建路径中删除 masterImages 并尝试这种方式。

我也试过 字符串路径 = getClass().getClassLoader().getResource("masterImages/googleHomePage1.png").toString(); 再次,空指针。我知道我在这里没有看到一些愚蠢的东西,就像我说这开始于我玩但现在让我烦恼的是为什么我无法让它工作。

非常感谢任何对我所缺少的东西的见解。

【问题讨论】:

  • 你是在 .jar 文件中做一个类的“getClass()”吗?

标签: java junit


【解决方案1】:

来自 - In java, how do you retrieve images from a jar file?

确实很简单:您使用java.lang.Classjava.lang.ClassLoader 中的各种getResource() 方法。例如,在您的应用中,您可以只写

treeURL = getClass().getResource("/images/tree.png");

这将在 jar 文件根目录下的 images 目录中找到该文件。 getResource() 方法的好处在于,无论文件是否在 jar 中,它们都可以工作——如果图像目录是磁盘上的真实目录,它仍然可以工作(只要图像的父级是你的课程路径。)

【讨论】:

  • 我已经尝试了这段代码,但仍然遇到同样的错误。我有以下内容: URL treeURL = getClass().getResource("/masterImages/googleHomePage1.png");仍然从 Eclipse 中获取空指针。我需要注意 Windows 文件系统有什么奇怪的地方吗?
  • 有趣的是,我只是在上面的行上放了一个断点,当我检查 treeURL 的内容时,它显示为空(所以我猜空指针是有效的) - 现在找出原因
【解决方案2】:

谢谢大家。我想我已经整理好了。原来我必须将包含图像的文件夹添加到类路径中 - 我错误地认为,因为我有 masterImages/otherFolderName,如果我包含 masterImages,那么 otherFolderName 中的任何文件都将包含在内。事实证明并非如此(至少对我而言)。

【讨论】:

    猜你喜欢
    • 2011-05-08
    • 1970-01-01
    • 2014-03-26
    • 2012-05-18
    • 1970-01-01
    • 2013-01-10
    • 2012-02-16
    • 1970-01-01
    • 2012-12-15
    相关资源
    最近更新 更多