【问题标题】:Failed due to exception from main class in others computers由于其他计算机中主类的异常而失败
【发布时间】:2016-12-14 00:17:37
【问题描述】:

我开发了一个 JavaFX 应用程序并部署为 .exe ,当我安装在我的计算机上时,一切正常。但是在我将 .exe 安装到另一台计算机并尝试打开应用程序后,它显示错误:

由于主类异常而失败。

有人可以帮我解决这个错误吗?

build.fxml

   <?xml version="1.0" encoding="UTF-8"?><!-- You may freely edit this file. See commented blocks below for --><!-- some examples of how to customize the build. --><!-- (If you delete it and reopen the project it will be recreated.) --><!-- By default, only the Clean and Build commands use this build script. --><project name="Main" default="default" basedir="." xmlns:fx="javafx:com.sun.javafx.tools.ant">
    <description>Builds, tests, and runs the project Main.</description>
    <import file="nbproject/build-impl.xml"/>
    <!--

    There exist several targets which are by default empty and which can be 
    used for execution of your tasks. These targets are usually executed 
    before and after some main targets. Those of them relevant for JavaFX project are: 

      -pre-init:                 called before initialization of project properties
      -post-init:                called after initialization of project properties
      -pre-compile:              called before javac compilation
      -post-compile:             called after javac compilation
      -pre-compile-test:         called before javac compilation of JUnit tests
      -post-compile-test:        called after javac compilation of JUnit tests
      -pre-jfx-jar:              called before FX SDK specific <fx:jar> task
      -post-jfx-jar:             called after FX SDK specific <fx:jar> task
      -pre-jfx-deploy:           called before FX SDK specific <fx:deploy> task
      -post-jfx-deploy:          called after FX SDK specific <fx:deploy> task
      -pre-jfx-native:           called just after -pre-jfx-deploy if <fx:deploy> runs in native packaging mode
      -post-jfx-native:          called just after -post-jfx-deploy if <fx:deploy> runs in native packaging mode
      -post-clean:               called after cleaning build products

    (Targets beginning with '-' are not intended to be called on their own.)

    Example of inserting a HTML postprocessor after javaFX SDK deployment:

        <target name="-post-jfx-deploy">
            <basename property="jfx.deployment.base" file="${jfx.deployment.jar}" suffix=".jar"/>
            <property name="jfx.deployment.html" location="${jfx.deployment.dir}${file.separator}${jfx.deployment.base}.html"/>
            <custompostprocess>
                <fileset dir="${jfx.deployment.html}"/>
            </custompostprocess>
        </target>

    Example of calling an Ant task from JavaFX SDK. Note that access to JavaFX SDK Ant tasks must be
    initialized; to ensure this is done add the dependence on -check-jfx-sdk-version target:

        <target name="-post-jfx-jar" depends="-check-jfx-sdk-version">
            <echo message="Calling jar task from JavaFX SDK"/>
            <fx:jar ...>
                ...
            </fx:jar>
        </target>

    For more details about JavaFX SDK Ant tasks go to
    http://docs.oracle.com/javafx/2/deployment/jfxpub-deployment.htm

    For list of available properties check the files
    nbproject/build-impl.xml and nbproject/jfx-impl.xml.

    -->

</project>

我也尝试将 build.fxml 更改为此但仍然相同:

<?xml version="1.0" encoding="UTF-8"?><!-- You may freely edit this file. See commented blocks below for --><!-- some examples of how to customize the build. --><!-- (If you delete it and reopen the project it will be recreated.) --><!-- By default, only the Clean and Build commands use this build script. --><project name="AutoMekanikAdmin" default="default" basedir="." xmlns:fx="javafx:com.sun.javafx.tools.ant">
<description>Builds, tests, and runs the project AutoMekanikAdmin.</description>
<import file="nbproject/build-impl.xml"/>
<!--

There exist several targets which are by default empty and which can be 
used for execution of your tasks. These targets are usually executed 
before and after some main targets. Those of them relevant for JavaFX project are: 

  -pre-init:                 called before initialization of project properties
  -post-init:                called after initialization of project properties
  -pre-compile:              called before javac compilation
  -post-compile:             called after javac compilation
  -pre-compile-test:         called before javac compilation of JUnit tests
  -post-compile-test:        called after javac compilation of JUnit tests
  -pre-jfx-jar:              called before FX SDK specific <fx:jar> task
  -post-jfx-jar:             called after FX SDK specific <fx:jar> task
  -pre-jfx-deploy:           called before FX SDK specific <fx:deploy> task
  -post-jfx-deploy:          called after FX SDK specific <fx:deploy> task
  -pre-jfx-native:           called just after -pre-jfx-deploy if <fx:deploy> runs in native packaging mode
  -post-jfx-native:          called just after -post-jfx-deploy if <fx:deploy> runs in native packaging mode
  -post-clean:               called after cleaning build products

(Targets beginning with '-' are not intended to be called on their own.)

Example of inserting a HTML postprocessor after javaFX SDK deployment:

    <target name="-post-jfx-deploy">
        <basename property="jfx.deployment.base" file="${jfx.deployment.jar}" suffix=".jar"/>
        <property name="jfx.deployment.html" location="${jfx.deployment.dir}${file.separator}${jfx.deployment.base}.html"/>
        <custompostprocess>
            <fileset dir="${jfx.deployment.html}"/>
        </custompostprocess>
    </target>

Example of calling an Ant task from JavaFX SDK. Note that access to JavaFX SDK Ant tasks must be
initialized; to ensure this is done add the dependence on -check-jfx-sdk-version target:

    <target name="-post-jfx-jar" depends="-check-jfx-sdk-version">
        <echo message="Calling jar task from JavaFX SDK"/>
        <fx:jar ...>
            ...
        </fx:jar>
    </target>

For more details about JavaFX SDK Ant tasks go to
http://docs.oracle.com/javafx/2/deployment/jfxpub-deployment.htm

For list of available properties check the files
nbproject/build-impl.xml and nbproject/jfx-impl.xml.

-->
<target name="post-jfx-deploy">
    <fx:deploy verbose="true" nativeBundles="exe" outdir="${basedir}/${dist.dir}" outfile="${application.title}">
        <fx:application name="${application.title}" mainClass="${javafx.main.class}" />
        <fx:resources>
            <fx:fileset dir="${basedir}/${dist.dir}" include="*.jar"/>
            <fx:fileset dir="${basedir}/${dist.dir}" include=";ib/*.jar"/>
        </fx:resources>
        <fx:info title="${application.title}" vendor="${application.vendor}" />
        <fx:info>
            <fx:icon href="${basedir}/icon.ico"></fx:icon>
        </fx:info>
        <fx:preferences shortcut="true" />
    </fx:deploy>
</target>

【问题讨论】:

  • Kyle Warford 链接到一个提到“异常描述”的问题。你有什么办法可以看到异常的描述吗?

标签: java javafx deployment


【解决方案1】:

您在构建时是否使用了任何 VM 参数?搜索错误时出现这个SE帖子:JavaFX failed due to exception in main class

尝试从控制台运行可执行文件和 jar,以进行调试:

有什么例外?尝试从控制台运行可执行文件,并尝试使用 java -jar 从控制台运行可执行 jar。并将结果作为您问题的一部分发布。

running from console

【讨论】:

  • 是的,我在 ProjectFile>Properties>Run>VM 选项中使用了 VM 参数:-Xms512m,还检查了我添加的 build.fxml
【解决方案2】:

这是java问题。如果您不将 java 添加到您的 exe 包中,则应用程序使用系统 java。您可以将 java 添加到您的 exe 包中。然后,应用程序使用该 java.util.如果你使用ant创建exe,那么在build.xml中添加这个参数;

    <javac includeantruntime="false" source="1.8" target="1.8" srcdir="build/src" destdir="build/classes" encoding="Cp1252">
        <classpath>
            <fileset dir="build/libs">
                <include name="*"/>
            </fileset>
        </classpath>
    </javac>

【讨论】:

  • 我应该在哪里添加这个,因为我使用 ProjectFile>Package as> EXE Installer 来制作那个 .exe 文件
  • 我认为您正在使用 ant 创建 exe。你可以添加这个
  • 上一个是 gradle 的。这个是给蚂蚁的。
  • 不,我正在使用 InnoSetup 5
  • 好的。 Ant 正在使用 innoSetup 创建 exe。项目中是否有 build.xml 文件?
【解决方案3】:

问题是这些其他计算机没有安装 JavaJDK,但他们只有 JavaJRE。所以我从 CMD java -jar 执行了 jar 文件,并在执行时创建了数据库表,它应该这样做。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-04
    • 1970-01-01
    • 1970-01-01
    • 2015-10-07
    • 2013-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多