我有一个程序,希望能够轻松地被任何用户安装,我认为创建本地安装程序是正确的方式。我使用了Netbeans 8.0的功能(项目属性 > 启用本地打包和打包为)。我成功地创建了一个可工作的本地安装程序。安装后,我有以下文件树:
+-- Project
\+-- app
\+--lib (containing all the jars used by the project)
\---Project.jar
\---package.cfg
\+--runtime
\+--jre (contains the current jre)
\---Project.exe
从Project.jar中运行程序是可行的。但是,当我尝试启动Project.exe时,我会在弹出窗口上收到以下错误信息:没有任何细节:
Failed due to exception from main class
为了确定问题的来源,我已经使用基本标准输出,并将它们重定向到文件中,感谢Windows命令提示符。我得到了输出,直到第一个对外部库的调用。因此,似乎库链接未完成。但是,这是我的package.cfg
文件的内容:
app.mainjar=Project.jar
app.mainclass=project/Main
app.classpath=lib/firstlibrary.jar lib/secondlibrary.jar
指定了classpath但似乎无法识别。我试着将反斜杠(\)倒过来,更改空格为
,
或;
,但都没有成功。有一种简单的方法可以复制这个错误(使用Netbeans 8.0和JDK 1.8u11):
- 在Netbeans中创建一个新的Java项目。
- 链接任何外部库(.jar):右键单击Libraries > Add jar/folder。
- 在main方法中,实例化引用该库的对象。
- 右键单击项目名称 > Properties > Deployment > Enable Native Packaging actions in project menu。
- 右键单击项目 > Package as > EXE installer。
- 构建完成后,转到创建安装程序的目录,并启动安装程序。
- 在安装结束时,转到安装目录并启动.exe文件。应该会出现错误。
System.out.println()
,通过终端启动我的exe并重定向输出。类似于file.exe > mystacktrace.txt
。 - Kolnfile.exe
将其输出呈现到 stdout?我在这个主题上找到的信息很少,而且无法想象为什么首先会抑制 stdout?编辑:我自己回答,因为迄今为止还没有涵盖这一点。简短的答案是:不行,我几乎可以肯定永远不会得到支持。原因是链接期间指定了生成的 exe 文件为非控制台应用程序。获取 stdout 的唯一方法是将其重定向到文件。 - quantum