构建后Java程序不运行

时间:2015-09-17 18:49:01

标签: java netbeans build nullpointerexception

我使用NetBeans编写了一个工具,当它在IDE中运行时,它正在工作。我已将工具所需的所有源文件放入resources文件夹。

构建和清理后,程序没有启动,它抛出异常 - >找不到档案。

我使用相对路径来使用我需要的数据,例如:

view.jIconRed1.setIcon(
  new javax.swing.ImageIcon(
    getClass().getResource("/usaTrafficResearchTool/resources/Icons/CheckMark22x20.png")));

它工作正常,直到我构建它。在我尝试了一些事情之后,Clean and Build甚至不再起作用了:

  

线程中的异常“AWT-EventQueue-0”java.lang.NullPointerException

更新

谢谢大家的帮助!!感激不尽。

这是Stacktrace(“第一个”,它找不到它应该读取的.txt):

C:\Users\rkryp_000>java -jar "D:\Raffa\Dokumente\USATrafficTool_V2.1\USATrafficLawResearchTool\dist\USATrafficLawResearchTool.jar"

Sep 24, 2015 12:53:32 PM presenter.Presenter getStateLinesFromTxt
SCHWERWIEGEND: null
java.io.FileNotFoundException:        file:\D:\Raffa\Dokumente\USATrafficTool_V2.1\USATrafficLawResearchTool\dist\USATrafficLawResearchTool.jar!\usaTrafficResearchTool\resources\Data\stateResources.txt
(Die Syntax f³r den Dateinamen, Verzeichnisnamen oder die Datentrõgerbezeichnung ist falsch)

(英文:文件名,foldername或驱动器名称的语法错误。)

    at java.io.FileInputStream.open0(Native Method)
    at java.io.FileInputStream.open(Unknown Source)
    at java.io.FileInputStream.<init>(Unknown Source)
    at java.io.FileReader.<init>(Unknown Source)
    at presenter.Presenter.getStateLinesFromTxt(Presenter.java:89)
    at presenter.Presenter.setStateList(Presenter.java:63)
    at presenter.Presenter.main(Presenter.java:194)

以下是我的Filereader的样子:

private static void setStateList() throws URISyntaxException {
    URL fileNameAsUrl = MainScreen.class.getClassLoader().getResource("usaTrafficResearchTool/resources/Data/stateResources.txt");


private static List getStateLinesFromTxt(URL fileNameAsUrl) {
    List array = new List();
try {
    BufferedReader reader = new BufferedReader(new FileReader(new File(fileNameAsUrl.getFile())));
    String line;

我检查了.jar文件是否正确打包,看起来是这样,.txt文件的路径实际上是正确的。

感谢您的支持!

3 个答案:

答案 0 :(得分:0)

您正在类路径中搜索该文件,因此图像未正确打包到jar文件中。

打开jar文件,例如使用WinZip,查看文件是否存在。如果没有,请修复构建脚本。

答案 1 :(得分:0)

当您使用相对路径时,Java会查找相对于当前运行位置的文件,因此Java可能会在IDE内部运行时找到该文件,但在尝试在Web服务器中运行时则不会。 getClass()。getResource(...)查找相对于类路径的文件,这意味着所有已编译的.class文件位于jar内的位置。

确保文件包含在jar中,如果没有,可能在IDE中有一个选项,并确保jar中的路径与IDE中的路径相同。

答案 2 :(得分:0)

CheckMark22x20.png文件放入src/resources/Icons/src/resources/Icons/CheckMark22x20.png)文件夹并将代码更改为

view.jIconRed1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/resources/Icons/CheckMark22x20.png")));

现在清理并构建jar文件。它应该没有任何问题。