Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建JavaFX可执行文件,包括JRE和外部库_Java_Netbeans_Ant_Jar_Javafx - Fatal编程技术网

创建JavaFX可执行文件,包括JRE和外部库

创建JavaFX可执行文件,包括JRE和外部库,java,netbeans,ant,jar,javafx,Java,Netbeans,Ant,Jar,Javafx,我在NetBeans下开发了一个JavaFX应用程序,它需要JRE8u60和一些外部库(jar和dll)以及一个“SQLite”数据库文件来运行。我正在寻找一种创建可执行文件或安装程序的方法,其中包括(或安装)这个版本的JRE和所需的库 首先,我尝试使用NetBeans本机打包程序,如中所示,但当我运行安装程序时,可执行文件显示它找不到主类。我只是遵循了那个教程,所以我不知道我是否错过了一些适合我的特殊情况的要点。My build.xml文件: <?xml version="1.0" en

我在NetBeans下开发了一个JavaFX应用程序,它需要JRE8u60和一些外部库(jar和dll)以及一个“SQLite”数据库文件来运行。我正在寻找一种创建可执行文件或安装程序的方法,其中包括(或安装)这个版本的JRE和所需的库

首先,我尝试使用NetBeans本机打包程序,如中所示,但当我运行安装程序时,可执行文件显示它找不到主类。我只是遵循了那个教程,所以我不知道我是否错过了一些适合我的特殊情况的要点。My build.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<project name="Petra" default="default" basedir="." xmlns:fx="javafx:com.sun.javafx.tools.ant">
<description>Builds, tests, and runs the project Petra.</description>
<import file="nbproject/build-impl.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="Petra.jar"/>
      </fx:resources>
      <fx:info title="${application.title}" vendor="${application.vendor}"/>
      <fx:platform basedir="C:\Program Files\Java\jdk1.8.0_60"/> 
  </fx:deploy>  
</target>
</project>

构建、测试和运行项目Petra。
编译时,输出中似乎没有任何错误:

ant -f C:\\Users\\jros\\Documents\\NetBeansProjects\\Petra jfx-rebuild
init:
deps-clean:
Updating property file: C:\Users\jros\Documents\NetBeansProjects\Petra\build\built-clean.properties
Deleting directory C:\Users\jros\Documents\NetBeansProjects\Petra\build
clean:
init:
deps-jar:
Created dir: C:\Users\jros\Documents\NetBeansProjects\Petra\build
Updating property file: C:\Users\jros\Documents\NetBeansProjects\Petra\build\built-jar.properties
Created dir: C:\Users\jros\Documents\NetBeansProjects\Petra\build\classes
Created dir: C:\Users\jros\Documents\NetBeansProjects\Petra\build\empty
Created dir: C:\Users\jros\Documents\NetBeansProjects\Petra\build\generated-sources\ap-source-output
Compiling 19 source files to C:\Users\jros\Documents\NetBeansProjects\Petra\build\classes
Note: Some input files use unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
Copying 26 files to C:\Users\jros\Documents\NetBeansProjects\Petra\build\classes
compile:
Created dir: C:\Users\jros\Documents\NetBeansProjects\Petra\dist
Copying 3 files to C:\Users\jros\Documents\NetBeansProjects\Petra\dist\lib
Detected JavaFX Ant API version 1.3
Launching <fx:jar> task from C:\Program Files\Java\jdk1.8.0_60\jre\..\lib\ant-javafx.jar
Launching <fx:deploy> task from C:\Program Files\Java\jdk1.8.0_60\jre\..\lib\ant-javafx.jar
No base JDK. Package will use system JRE.
RelativeFileSet{basedir:C:\Users\jros\Documents\NetBeansProjects\Petra\dist, files:[Petra.jar, lib\RXTXcomm.jar, lib\ojdbc6.jar, lib\sqlitejdbc-0.5.4.jar]}
No base JDK. Package will use system JRE.
Using base JDK at: C:\Program Files\Java\jdk1.8.0_60\jre
RelativeFileSet{basedir:C:\Users\jros\Documents\NetBeansProjects\Petra\dist, files:[Petra.jar]}
Using base JDK at: C:\Program Files\Java\jdk1.8.0_60\jre
Creating app bundle: Petra in C:\Users\jros\Documents\NetBeansProjects\Petra\dist\bundles
Result application bundle: C:\Users\jros\Documents\NetBeansProjects\Petra\dist\bundles
Installer (.exe) saved to: C:\Users\jros\Documents\NetBeansProjects\Petra\dist\bundles
RelativeFileSet{basedir:C:\Users\jros\Documents\NetBeansProjects\Petra\dist, files:[Petra.jar]}
jfx-deployment-script:
jfx-deployment:
jar:
jfx-rebuild:
BUILD SUCCESSFUL (total time: 3 minutes 31 seconds)
ant-fc:\\Users\\jros\\Documents\\NetBeansProjects\\Petra jfx rebuild
初始化:
清洁署署长:
更新属性文件:C:\Users\jros\Documents\NetBeansProjects\Petra\build\build-clean.properties
正在删除目录C:\Users\jros\Documents\NetBeansProjects\Petra\build
清洁:
初始化:
deps jar:
创建目录:C:\Users\jros\Documents\NetBeansProjects\Petra\build
更新属性文件:C:\Users\jros\Documents\NetBeansProjects\Petra\build\build-jar.properties
创建目录:C:\Users\jros\Documents\NetBeansProjects\Petra\build\classes
创建目录:C:\Users\jros\Documents\NetBeansProjects\Petra\build\empty
创建目录:C:\Users\jros\Documents\NetBeansProjects\Petra\build\generated sources\ap source output
正在将19个源文件编译为C:\Users\jros\Documents\NetBeansProjects\Petra\build\classes
注意:某些输入文件使用未经检查或不安全的操作。
注意:使用-Xlint重新编译:未选中以获取详细信息。
正在将26个文件复制到C:\Users\jros\Documents\NetBeansProjects\Petra\build\classes
汇编:
创建目录:C:\Users\jros\Documents\NetBeansProjects\Petra\dist
正在将3个文件复制到C:\Users\jros\Documents\NetBeansProjects\Petra\dist\lib
检测到JavaFX Ant API版本1.3
从C:\Program Files\Java\jdk1.8.0\U 60\jre\..\lib\ant-javafx.jar启动任务
从C:\Program Files\Java\jdk1.8.0\U 60\jre\..\lib\ant-javafx.jar启动任务
没有基本的JDK。包将使用系统JRE。
RelativeFileSet{basedir:C:\Users\jros\Documents\NetBeansProjects\Petra\dist,文件:[Petra.jar,lib\RXTXcomm.jar,lib\ojdbc6.jar,lib\sqlitejdbc-0.5.4.jar]}
没有基本的JDK。包将使用系统JRE。
在以下位置使用基本JDK:C:\Program Files\Java\jdk1.8.0\U 60\jre
RelativeFileSet{basedir:C:\Users\jros\Documents\NetBeansProjects\Petra\dist,文件:[Petra.jar]}
在以下位置使用基本JDK:C:\Program Files\Java\jdk1.8.0\U 60\jre
正在创建应用程序包:C:\Users\jros\Documents\NetBeansProjects\Petra\dist\bundles中的Petra
结果应用程序捆绑包:C:\Users\jros\Documents\NetBeansProjects\Petra\dist\bundles
安装程序(.exe)保存到:C:\Users\jros\Documents\NetBeansProjects\Petra\dist\bundles
RelativeFileSet{basedir:C:\Users\jros\Documents\NetBeansProjects\Petra\dist,文件:[Petra.jar]}
jfx部署脚本:
jfx部署:
罐子:
jfx重建:
生成成功(总时间:3分31秒)
但当我运行安装程序时,生成的“exe”抛出以下两个窗口:


这方面有什么线索吗?

我还没有找到将JRE直接放入可执行文件的方法,但这里有一种方法,至少可以将所有库放在Jar中(使用Netbeans)以减少混乱。您以前可能在StackOverflow的其他地方见过它

  • 清理并构建您的程序
  • 打开文件

  • 将以下代码添加到build.xml:

    <target name="package-for-store" depends="jar">
    
        <property name="store.jar.name" value="MyJarName"/>
    
        <!-- don't edit below this line -->
    
        <property name="store.dir" value="store"/>
        <property name="store.jar" value="${store.dir}/${store.jar.name}.jar"/>
    
        <echo message="Packaging ${application.title} into a single JAR at ${store.jar}"/>
    
        <delete dir="${store.dir}"/>
        <mkdir dir="${store.dir}"/>
    
        <jar destfile="${store.dir}/temp_final.jar" filesetmanifest="skip">
            <zipgroupfileset dir="dist" includes="*.jar"/>
            <zipgroupfileset dir="dist/lib" includes="*.jar"/>
    
            <manifest>
                <attribute name="Main-Class" value="${main.class}"/>
            </manifest>
        </jar>
    
        <zip destfile="${store.jar}">
            <zipfileset src="${store.dir}/temp_final.jar"
            excludes="META-INF/*.SF, META-INF/*.DSA, META-INF/*.RSA"/>
        </zip>
    
        <delete file="${store.dir}/temp_final.jar"/>
    
    </target>
    
    
    
  • 只需将MyJarName更改为您希望调用的Jar文件(去掉.Jar扩展名)

  • 右键单击build.xml,然后单击运行目标
  • 你都准备好了。完整的jar将位于主项目文件夹中名为存储的文件夹中。然后可以在Launch4J中将其打包为.exe

  • 您是否考虑过使用gradle作为构建工具?javafx有一个gradle插件。看一看,或者使用maven java fx plugin,它有一些bug,但对构建/导出到jar会有很大帮助谢谢你的方法,但是生成的jar甚至没有启动:可能我必须添加dll库,不是吗??我是新来的,你可以发布build.xml的截图,其中包含存储代码包吗?上面的代码只会将“lib”文件夹的内容复制到最终的jar中。如果您有任何其他依赖项,您也必须使用类似于
    的东西来添加它们。这种方法似乎不适用于dll的库:(无论如何,谢谢,它可能会在下一个项目中有所帮助;)这不适用于java fx,因为java fx有自己的ant工具。