【问题标题】:Java program runs fine in Eclipse but not as a .jar fileJava 程序在 Eclipse 中运行良好,但不能作为 .jar 文件运行
【发布时间】:2014-04-18 05:22:02
【问题描述】:

我的 .jar 文件有问题。它在 Eclipse 中运行良好,但一旦我导出它,它就无法打开。我检查了清单文件,看起来没问题。

我尝试将其导出为可运行的 jar,以及仅使用 jar 构建器。没有任何效果。

我尝试在命令提示符下运行它,它说它无法访问 jar 文件...我在这里搜索了一段时间,但还没有找到答案。

我不确定我做错了什么。我唯一能想到的就是我没有正确获取图像。

我正在为程序的精灵使用 .png 文件,下面是我如何为我的程序获取它们的示例。

此代码开始从 .png 文件构建关卡。

public class SpawnLevel extends Level{

public SpawnLevel(String path) {
    super(path);
}

protected void loadLevel(String path){
    try{
        System.out.println("classpath is: " + System.getProperty("java.class.path"));
        BufferedImage image = ImageIO.read(SpawnLevel.class.getResource(path));
        int w = width = image.getWidth();
        int h = height= image.getHeight();
        tiles = new int[w*h];
        image.getRGB(0,0,w,h,tiles,0,w);
    }catch(IOException e){
        e.printStackTrace();
        System.out.println("EXEPTION FOUND!!!  Could not load the level file!");
    }
}

protected void generateLevel(){
    System.out.println("Tiles: " + tiles[0]);
}

}

我之前为另一个程序制作了另一个 .jar 并且没有问题。任何帮助将不胜感激。

如果有帮助,我使用此代码显示资源文件夹路径信息。

System.out.println("classpath is: " + System.getProperty("java.class.path"));

这是我的资源文件夹的当前路径。在我从 eclipse 导出之前。

    classpath is: C:\Users\name\workspace\Rpg_Game\bin;C:\Users\name\workspace\Rpg_Game\res

导出到 .jar 之后

    classpath is: 2ndGameTest.jar

【问题讨论】:

  • 试试 SpawnLevel.class.getResourceAs(path) 和路径是什么或者你能附上错误日志吗?
  • 你是如何运行 jar 文件的?你的主要课程在哪里?
  • @andy 我将我的代码更改为 SpawnLevel.class.getResourceAsStream(path),现在当我通过命令提示符运行它时,它给我的异常是 imageIo.read(Unknown Source)。
  • 这通常是路径字符串错误或图像未包含在 jar 中。
  • @greg-449 我的图像在项目文件夹中,并在我导出项目时出现。我正在查看我的项目的“配置构建路径”。如果构建路径正确,我应该查看什么?我目前看到了 src、系统库和我的资源文件夹。

标签: java eclipse executable-jar


【解决方案1】:

如果您的图像在src 中的resources 包中,您应该为getResource() 使用的路径类似于

class.getResource("/resources/levels/level1.png")

更新测试程序

import java.awt.Image;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JOptionPane;

public class TestImage {

    public static void main(String[] args) throws IOException {
        Image image = ImageIO.read(TestImage.class.getResource("/resources/images/image.png"));
        ImageIcon icon = new ImageIcon(image);
        JLabel label = new JLabel(icon);
        JOptionPane.showMessageDialog(null, label);
    }
}

【讨论】:

  • 我的资源文件夹在我的 src 之外。我尝试将资源放入 src 文件夹并调整我的代码,但结果相同;它在 Eclipse 中可以正常工作,但不能作为 jar 使用。
  • 好的,我发布了一个测试程序。打开一个新项目,在 src 中创建资源/图像并将图像放入图像中。将此用作测试程序。将其打包在jar中,看看是否看到图像。让我知道。如果它有效,那么您就知道您的程序有问题。
  • 当我将测试程序作为 jar 运行时,它可以正常工作,所以我的代码在某处有问题。关于下一步看哪里的任何提示?
  • 调用loadLevel时出现异常?另外,如果问题出在哪里,您究竟是通过path 传递给该方法的。
  • 感谢您的帮助。在查看了我的路径并使用了您的 ImageTest 程序后,我发现我的路径都必须是正确的大小写才能正确加载到我的 jar 文件中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-18
  • 1970-01-01
  • 1970-01-01
  • 2021-06-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多