我正在使用javafx v8.0.40开发桌面应用程序。我用inno 5创建了一个exe文件。当我在我的计算机上运行exe文件时,它安装并运行没有任何问题。另一方面,当我尝试在其他计算机上安装并运行它时,在安装结束时会弹出窗口对话框:"错误调用方法",我单击确定。弹出另一个窗口说"无法启动jvm"。我搜索了整个互联网,但我对这个话题找不到多少。我希望我能解决这个问题。 提前谢谢。
答案 0 :(得分:12)
我遇到了同样的问题;以下工作对我有帮助,让我理解那些被抨击的错误调用方法。"和#34;无法启动JVM"对话框:
.jar
文件
AppData\Local\{ApplicationTitle}\app
下的应用程序的安装目录中(快捷方式:键入%appdata%into explorer );如果您的项目名为HelloWorld,那么您将找到HelloWorld.jar
cd
使用命令提示符到同一目录) .jar
java -jar "HelloWorld.jar"
并点击输入 Tadah!看看你隐藏的异常(其中存在"错误调用方法。"所以模糊地尝试与你沟通)。 *
如果您的问题与mine类似,则源于项目out
文件夹和安装目录之间的文件结构差异,以及该程序在编辑器中编译得很好的原因并且建立得很好 - 在它构建之前没有问题,文件结构有点不同。
*如果您在通过命令行运行时没有获得任何内容,请查找在initialize()
方法期间可能发生的任何错误;那可能是你的问题所在。 您可以使用a similar problem, here中显示的弹出例外对话框在运行时公开任何异常。
答案 1 :(得分:5)
这可能是因为它缺少输出jar中的依赖项。所以你需要在工件中添加库,然后.exe生成应该没问题。
以下是Intellij的一个示例,其中的库可以从"可用元素"到神器
答案 2 :(得分:2)
即使这个问题有点陈旧 - 今天我遇到了完全相同的问题,并且无法找到解决其他问题的解决方案。
问题几乎完全相同: 使用java 8构建JavaFX应用程序(在dev pc上正常运行)并使用Inno 5打包到本机安装程序(exe)。 应用程序在我们的某些机器上运行正常 - 在其他机器上运行失败,与错误消息完全相同:
在应用程序启动时,fxml加载程序加载第一个视图控制器并调用其"初始化"方法。如果 - 在initialize中 - 抛出了一个未被触发的异常,则应用程序崩溃并显示这两个窗口错误消息。
希望这会帮助一些喜欢我的人也在努力解决这个问题。
答案 3 :(得分:1)
J.Dürr的回答(16年6月8日回答9:58)帮助解决了我的错误调用方法& 无法启动JVM 问题。我使用以下代码来追踪问题,结果证明这是一个错误的FXML资源路径:
public static void main(final String[] taArgs)
{
try
{
Main.launch(taArgs);
}
catch (Exception e)
{
JOptionPane.showMessageDialog(null, e.getMessage());
try
{
PrintWriter pw = new PrintWriter(new File("<somefilename.txt>"));
e.printStackTrace(pw);
pw.close();
}
catch (IOException e1)
{
e1.printStackTrace();
}
}
}
答案 4 :(得分:0)
我无法解决问题,但找到了解决方法。我使用记事本创建了一个批处理文件来启动该应用程序。首先,我使用jscodeshift
到cd
文件的目录,然后使用.jar
启动应用程序。它应该看起来像这样:
java -jar
将其另存为桌面上的cd C:\[wherever your project folder is located]\[name of project]\dist
java -jar [name of project].jar
文件,启动批处理文件,程序将启动!
答案 5 :(得分:0)
我只是遇到了这个问题,@ Brad Turek的回答向我指出了正确的方向。除了引发异常的不是我的代码。
用于启动我的应用程序的.exe包装程序的.cfg文件(位于/<app_name>/app/<app_name>.cfg
)错误地指向/lib
目录中不存在的lib(jar文件)。我(得出结论)是哪个原因导致类加载器抛出并终止启动。
更正.cfg文件后,一切正常。
答案 6 :(得分:0)
如果您未在构建中包含第三方库,则可能会遇到此错误。
以下内容可以放在build.xml中,恰好在项目的结束标记之前。
<target name="-post-jfx-deploy">
<fx:deploy width="${javafx.run.width}" height="${javafx.run.height}" nativeBundles="all"
outdir="${basedir}/${dist.dir}" outfile="${application.title}">
<fx:application name="${application.title}" mainClass="${javafx.main.class}"/>
<fx:resources>
<fx:fileset dir="${basedir}/${dist.dir}" includes="*.jar"/>
<fx:fileset dir="${basedir}/${dist.dir}" includes="lib/*.jar"/>
</fx:resources>
<fx:info title="${application.title}" vendor="${application.vendor}"/>
</fx:deploy>