JavaFX 应用程序无法使用 native exe bundle 启动

标签 java netbeans javafx javafx-2 javafx-8

我已经构建了一个可以通过其 jar 文件执行的 JavaFX 应用程序。但是,如果我尝试使用 native exe bundle 运行它,我会收到两个弹出窗口:

  • com/npap/dicomrouter/Main - 无主类

  • 启动 JVM 失败

应用程序无法启动。

这是我的主类(大部分):

package com.npap.dicomrouter;

public class Main extends Application {
    ...
    public static void main(String[] args) throws IOException {

        try {
            JUnique.acquireLock(appId);
            alreadyRunning = false;
            log.info("application is going to start running!!!!");
        } catch (AlreadyLockedException e) {
            alreadyRunning = true;
            log.info("application is already running!!!!");
        }

        if (!alreadyRunning) {
            Application.launch(Main.class, (java.lang
            .String[])null);
        }


    }

    @Override
    public void start(Stage primaryStage) throws IOException {
        ...
        try {
            AnchorPane page = (AnchorPane) FXMLLoader.load(Main.class.getResource("FXMLDocument.fxml"));
            Scene scene = new Scene(page, initWidth, initHeight);
            primaryStage.setScene(scene);
            Platform.setImplicitExit(false);
            createTrayIcon(primaryStage);
            primaryStage.setTitle(appTitle);
            primaryStage.show();
        } catch (IOException ex) {
            log.log(Level.INFO, null, ex);            
        }
    }

我的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:resources>
      <fx:info title="${application.title}" 
               vendor="${application.vendor}"/>
    </fx:deploy>          
</target>

我正在使用 Netbeans 构建应用程序 (Java FX 2.1),按照此处描述的方式:

https://netbeans.org/kb/docs/java/native_pkg.html

我已经使用 native exe 包成功构建并运行了其他 javafx 应用程序。我还附上了一张屏幕截图,显示了我如何声明主项目的类。

enter image description here

所以我深刻地认为这是一个项目特定的问题。在控制台中构建期间我得到:

The jar lib\hibernate-commons-annotations-4.0.2.Final.jar has a main class org.hibernate.annotations.common.Version that does not match the declared main com.xxxx.yyyy.Main
The jar lib\javassist-3.15.0-GA.jar has a main class javassist.CtClass that does not match the declared main com.xxxx.yyyy.Main
The jar lib\h2-1.3.176.jar has a main class org.h2.tools.Console that does not match the declared main com.xxxx.yyyy.Main

除了这些 jar 之外,我还使用了其他几个包含“main”方法(可运行)的类。

@SuppressWarnings("unchecked")
public static void main(String args[]) throws Exception {
    ...

其中大多数是第 3 方实用程序类。

我还添加了 package.cfg 文件的内容仅供引用:

app.mainjar=DicomRouterAffidea0_2_2.jar
app.version=1.0
app.id=com.npap.dicomrouter
app.preferences.id=com/npap/dicomrouter
app.mainclass=com/npap/dicomrouter/Main
app.classpath=lib/antlr-2.7.7.jar lib/c3p0-0.9.2.1.jar lib/clibwrapper_jiio.jar .....
... //jars listing

最后我附上 3 个库、编译和部署 Netbeans 配置的屏幕截图。希望也能有所帮助:

enter image description here

enter image description here

enter image description here

最佳答案

只是回答我的问题,因为经过一些试验,我设法通过从 build.xml 中删除代码来构建一个功能性 .exe 文件。

所以我从 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:resources>
  <fx:info title="${application.title}" 
           vendor="${application.vendor}"/>
</fx:deploy>          

我只是导入:

<import file="nbproject/build-impl.xml"/>

关于JavaFX 应用程序无法使用 native exe bundle 启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33004035/

相关文章:

java - 通过java App查看PDF

java - 解析 Chrome 书签 Json 文件 : Java

css - 如何使用 CSS 在 JavaFX Scene Builder 中设置自定义字体

JavaFx,@FXML 的问题

java - 当 Arraylist 大小为 139 时,索引 6 上出现 IndexOutOfBoundsException

java - 使用 Google Guice 注入(inject) java 属性

java - JSP发送具有html内容的字符串参数

java - Netbeans CRUD 应用程序中的错误

java - 有没有什么方法可以找出Android智能手机的显示变化事件?

directory - JavaFX 文件选择器和目录选择器