调用方法时出错,无法启动jvm

时间:2015-10-22 15:43:10

标签: javafx javafx-8

我正在使用javafx v8.0.40开发桌面应用程序。我用inno 5创建了一个exe文件。当我在我的计算机上运行exe文件时,它安装并运行没有任何问题。另一方面,当我尝试在其他计算机上安装并运行它时,在安装结束时会弹出窗口对话框:"错误调用方法",我单击确定。弹出另一个窗口说"无法启动jvm"。我搜索了整个互联网,但我对这个话题找不到多少。我希望我能解决这个问题。 提前谢谢。

7 个答案:

答案 0 :(得分:12)

我遇到了同样的问题;以下工作对我有帮助,让我理解那些被抨击的错误调用方法。"和#34;无法启动JVM"对话框:

  1. 找到您的.jar文件
    • 它与您的项目具有相同的名称,它位于AppData\Local\{ApplicationTitle}\app下的应用程序的安装目录中(快捷方式:键入%appdata%into explorer );如果您的项目名为HelloWorld,那么您将找到HelloWorld.jar
  2. 在命令提示符中导航到它的目录
    • shift + 右键单击在资源管理器窗口中的任何空白处,然后选择"打开命令窗口" (这是我最近学到的一个花哨的技巧; alternatively you would cd使用命令提示符到同一目录)
  3. 通过命令行运行.jar
    • 输入java -jar "HelloWorld.jar"并点击输入
  4. Tadah!看看你隐藏的异常(其中存在"错误调用方法。"所以模糊地尝试与你沟通)。 *

    如果您的问题与mine类似,则源于项目out文件夹和安装目录之间的文件结构差异,以及该程序在编辑器中编译得很好的原因并且建立得很好 - 在它构建之前没有问题,文件结构有点不同。

    *如果您在通过命令行运行时没有获得任何内容,请查找在initialize()方法期间可能发生的任何错误;那可能是你的问题所在。 您可以使用a similar problem, here中显示的弹出例外对话框在运行时公开任何异常。

答案 1 :(得分:5)

这可能是因为它缺少输出jar中的依赖项。所以你需要在工件中添加库,然后.exe生成应该没问题。

以下是Intellij的一个示例,其中的库可以从"可用元素"到神器

Intellij example

答案 2 :(得分:2)

即使这个问题有点陈旧 - 今天我遇到了完全相同的问题,并且无法找到解决其他问题的解决方案。

问题几乎完全相同: 使用java 8构建JavaFX应用程序(在dev pc上正常运行)并使用Inno 5打包到本机安装程序(exe)。 应用程序在我们的某些机器上运行正常 - 在其他机器上运行失败,与错误消息完全相同:

  • "错误调用方法" 然后点击OK
  • "无法启动jvm"。

在应用程序启动时,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)

我无法解决问题,但找到了解决方法。我使用记事本创建了一个批处理文件来启动该应用程序。首先,我使用jscodeshiftcd文件的目录,然后使用.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>