【问题标题】:Project runs fine on NetBeans but .jar gives errors项目在 NetBeans 上运行良好,但 .jar 出现错误
【发布时间】:2012-06-27 00:04:01
【问题描述】:

我正在 NetBeans 上运行我的项目,但我无法成功运行 .jar 文件。 1.我正在使用 Java 类库开发我的项目,后来发现清单文件中存在一些问题。 . 2. 然后为了解决上面的问题,我创建了项目作为JavaApplication项目,现在清单看起来像这样

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.8.3
Created-By: 1.6.0_22-b22 (Sun Microsystems Inc.)
Class-Path: 
Main-Class: gameloftbraker.GameLoftBraker

在终端上它会抛出以下异常:

Exception in thread "main" java.lang.NullPointerException
    at javax.swing.ImageIcon.<init>(ImageIcon.java:204)
    at gameloftbraker.Ball.<init>(Ball.java:26)
    at gameloftbraker.Arena.gameInit(Arena.java:71)
    at gameloftbraker.Arena.addNotify(Arena.java:67)
    at java.awt.Container.addNotify(Container.java:2584)
    at javax.swing.JComponent.addNotify(JComponent.java:4687)
    at java.awt.Container.addNotify(Container.java:2584)
    at javax.swing.JComponent.addNotify(JComponent.java:4687)
    at java.awt.Container.addNotify(Container.java:2584)
    at javax.swing.JComponent.addNotify(JComponent.java:4687)
    at javax.swing.JRootPane.addNotify(JRootPane.java:754)
    at java.awt.Container.addNotify(Container.java:2584)
    at java.awt.Window.addNotify(Window.java:707)

提前感谢您的帮助。我希望我没有遗漏任何东西。代码构建并运行成功,没有问题,如果需要代码,请告诉我。

球.java

////////////////
package gameloftbraker;

import javax.swing.ImageIcon;

public class Ball extends Graphc implements Commn {

    protected String ball = "../images/ball.png"; //address to ball graphic
    protected int xdir;      

    protected int ydir;

    public Ball(){  
        xdir =  2;
        ydir = -2;

        ImageIcon img = new ImageIcon(this.getClass().getResource(ball));
        image = img.getImage();

        height = image.getHeight(null);
        width = image.getWidth(null);

        resetState();
    }
// rest of the functions * it works perfectly as project but unable to run in .jar
}

【问题讨论】:

    标签: java netbeans


    【解决方案1】:

    如果您向我们展示 Ball 的代码,突出显示堆栈跟踪中显示的行,这将有所帮助...但我的 猜测 是您没有为您的游戏正确放入jar文件中。

    需要指出的一点:

    代码构建并运行成功,没有问题

    现在它没有成功运行,是吗?在 one 环境中构建和运行成功并不意味着代码没有问题。例如,您可以在其中包含任何其他机器上不存在的硬编码文件名 - 我并不是说实际上 这里的情况,我只是说“适用于我的机器”并不能证明代码没有问题。

    编辑:现在我们可以看到您的代码,看起来 ball.png 可能不在 jar 文件中。 或者问题是您在资源名称中使用了..。尝试将资源名称更改为:

    // TODO: Make this private static final unless you have any reason not to...
    protected String ball = "/images/ball.png";
    

    【讨论】:

    • 我正在使用 NetBeans 7.1.0 。目前我正试图在与 .jar 和相同的 OS 相同的机器上运行它。它不是作为 .jar 运行,而是在 IDE 中运行
    • @user595169:正如我所说,您似乎没有将 ball.png 文件捆绑到您的 jar 文件中。所以先检查一下。
    • @user595169:查看我的编辑。当您从 jar 加载资源时,我完全不确定 ../images/ball.png 是一个有效的资源名称。
    • 嘿,有帮助 谢谢!!!!我是 netBeans 的新手,终端真是个好地方。
    【解决方案2】:

    如果你想在 jar 之外使用数据(例如图片),只需使用这个:

    ImageIcon img = new ImageIcon(ball);
    

    在 IDE 运行时,您只有文件夹,所以它可以工作。在 jar 文件中你必须留下 jar 文件,我认为你的方式是不可能的

    【讨论】:

    • 所以现在根据你的说法,我应该进入我的 .java 文件并更改它,然后再次构建它我怀疑我应该提供什么资源路径,目前在我当前的 .jar 中保存images 文件夹中的文件,所以它应该像 /Images/ball.png 对吗?
    • 如果图片在罐子里,请尝试使用“/images/ball.png”或“images/ball.png”
    • 你的结构是:/java.jar!/classes /java.jar!/images 还是 /images?
    • 它的 /name.jar/images 我正在修改
    猜你喜欢
    • 1970-01-01
    • 2020-07-02
    • 1970-01-01
    • 1970-01-01
    • 2010-10-24
    • 2021-01-18
    • 1970-01-01
    • 1970-01-01
    • 2020-10-29
    相关资源
    最近更新 更多