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

在导出的JAR中加载图像,但在从eclipse运行时不加载

澹台蕴藉
2023-03-14

我见过很多人对在Eclipse中运行时加载的图像有相同的问题,但在从导出的JAR中运行时没有。我一直有这个问题,直到我找到了正确的解决方案。现在我遇到了一个问题,当从一个新导出的、可运行的JAR运行时,图像被加载,程序工作得非常完美,但在Eclipse中却不行!值得注意的是,我在我的机器上更新了Java!

它在Eclipse中运行得非常好,直到我解决了如何正确导出可运行的JAR,现在却没有!资产文件夹被设置为源文件夹,第19行显示的图像类使用以下代码:

public Image(String path)
{
    
    try {
        image = ImageIO.read(getClass().getResourceAsStream(path));
    } 
    catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    
    w = image.getWidth();
    h = image.getHeight();
    // Reads all the pixel data into a 1D array
    p = image.getRGB(0, 0, w, h, null, 0, w);
}

完整的错误可以在屏幕截图中查看,但例外是:

Exception in thread "main" java.lang.IllegalArgumentException: input == null!
    at java.desktop/javax.imageio.ImageIO.read(ImageIO.java:1356)
    at rawGE/com.albionbrown.rawge.gfx.Image.<init>(Image.java:20)
    at coalDrop/com.albionbrown.ld48.MenuSprite.<init>(MenuSprite.java:19)
    at coalDrop/com.albionbrown.ld48.Game.<init>(Game.java:44)
    at coalDrop/com.albionbrown.ld48.Game.main(Game.java:32)

共有1个答案

姚韬
2023-03-14

过了很长一段时间,我终于发现了问题所在。

在我导出的JAR(一个小游戏库,我当时正在导入到我的游戏项目中)中,我有一个用于加载图像的类

getClass().getResourceAsStream(path)

给定的路径是一个真实图像的字符串。当在我的游戏库项目中运行测试类时,这很好,因为我猜getResourceAsStream()使用本地化的根作为游戏库项目的根。

所以,我的解决方案是为我的图像加载类(在游戏库中)创建两个构造函数。仍然接受文件路径字符串并使用getClass()的。getResourceAsStream(路径),如下所示:

public Image(String path)
{
    loadImageResource(getClass().getResourceAsStream(path));
}

private void loadImageResource(InputStream path)
{
    try {
        image = ImageIO.read(path);
    }
    catch (IOException e) {
        e.printStackTrace();
    }
}

另一个是使用游戏库作为导出JAR的项目,它接受了一个输入流对象。这意味着调用图像构造函数的方法需要运行getClass()。getResourceAsStream(路径)本身(我想是使用该项目作为根,而不是导出的JAR的根)。像这样:

public Image(InputStream path)
{
    loadImageResource(path);
}

private void loadImageResource(InputStream path)
{
    try {
        image = ImageIO.read(path);
    }
    catch (IOException e) {
        e.printStackTrace();
    }
}
 类似资料:
  • 问题内容: 我试图在运行时将jar文件添加到classpath。我用这个代码 系统输出打印此URL: 我正在仔细检查此路径,此jar存在。即使这个测试也显示com.mysql.jdbc。驱动程序类存在。 但是,当我使用此Class.forName(driver)时,仍然会收到java.lang.ClassNotFoundException。此代码有什么问题? 问题答案: URL可以,但是您仍然尝试

  • 摘要:从正在运行的Java程序加载jar会导致由类间依赖(例如语句)引起的引起的。我如何绕过它? 更详细的问题是: 我试图通过自己的Java程序将jar文件(我们称之为“服务器”)以编程方式加载到Java虚拟机中(我们称之为“ServerAPI”),并使用扩展和其他一些技巧来修改服务器的行为并与之交互。ServerAPI依赖于服务器,但如果服务器不存在,ServerAPI仍然必须能够从网站上运行和

  • 我正在使用Scene Builder2.0和eclipse Luna。在fxml文件中,我有我的场景的代码和图像。如果我在eclipse上测试这一点,一切都是正常的,但是如果我将它导出到可运行的jar中,然后运行它,我就会得到没有图像的窗口...以下是部分代码: 文件结构: 我觉得问题出在路径上,但我不知道这条路是怎么走的。加载程序代码: 初始化函数:

  • 我正在尝试从可执行JAR文件加载图像。 我跟踪了这里的信息,然后是这里的信息。 这是检索图像的函数: 这就是它的名称: 这是一个简单的对象。我也不会得到NullPointerException,除非它被UI屏蔽。 我检查了JAR文件,图像位于: /图片/标识1。巴布亚新几内亚 当前代码在eclipse中以及导出到JAR并在终端中运行时都有效,但在双击JAR时不起作用,在这种情况下,图标是默认的JF

  • 我在尝试导出独立应用程序时遇到问题。 当我使用eclise执行它时,它运行正常,但当我试图导出到可运行的jar时,它会给我一些错误。 我的坚持。xml看起来像 它位于src/META-INF/persistence。xml 从终端运行时得到的堆栈跟踪是: 在爪哇。朗,反思一下。方法在组织中调用(未知源)。日食jdt。内部的jarinjarloader。罐式装载机。main(jarsrcloader

  • 问题内容: 我一直在做一个需要外部图像才能显示的小项目。我对如何使用Eclipse并不十分熟悉,这是我第一次尝试导出完成的项目,以便与他人共享。现在,似乎可以显示图像的唯一方法是在硬盘驱动器上分配一个特定的文件夹并在代码中包含图像路径。我正在寻找一种将图像导出为我的JAR或同一包的一部分的方法,因此当我将该程序发送给其他人时,不必将它们发送到单独的图像存档文件夹中。我还将对我需要做些什么来使我的代