我正在尝试使用maven依赖项创建一个JFX11自包含jar.从我所做的研究来看,似乎最好的方法是通过maven shade插件.但是,当我运行它时,我收到此错误:
错误:缺少JavaFX运行时组件,并且需要运行此应用程序
我不明白为什么会这样.我搞砸了什么?有一个更好的方法吗?我也用同样的消息尝试了maven程序集插件.
pom文件供参考
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>Application</groupId>
<artifactId>Main</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>SpaceRunner</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>11</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<release>10</release>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.6.0</version>
<executions>
<execution>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>Application.Main</mainClass>
</configuration>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>
Application.Main
</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>Application.Main</mainClass>
</transformer>
</transformers>
</configuration>
</execution> …
Run Code Online (Sandbox Code Playgroud) 我有一个JavaFX(JDK 8)桌面业务应用程序,它使用Java Web Start进行部署.用户安装了Java 8,他们只需转到URL(我的AWS Linux服务器上的公共URL),然后下载/启动应用程序(使用Web Start).我也可以通过将新JAR部署到服务器来轻松更新应用程序.一切都很好.
但是,Oracle已经停止了使用Java 11的Web Start,并且在2018年3月的"Java客户端路线图更新"白皮书中,他们建议将JRE与应用程序捆绑在一起("应用程序的概念是从独立的JRE单独分发的,因此,快速消退.").我不能依赖我的用户留在Java 8 for Web Start,即使他们仍然保持在8,Oracle也需要许可才能继续使用Java 8(我没有,可能非常昂贵,我更喜欢无论如何与社区一起走向JavaFX 11和OpenJDK).
我想迁移到JavaFX 11.我遵循OpenJFX的"JavaFX11入门"(https://openjfx.io/openjfx-docs/),使用OpenJDK 11.0.1和Gluon的JavaFX SDK 11.0.1(在Netbeans 10vc2上) ),并且已经能够运行示例应用程序(在我看来,我应该能够非常轻松地将我的JavaFX 8代码移植到JavaFX 11).
然而,这是我被困在方向的地方.如何将其与JRE捆绑在一起并将其部署到我的最终用户(并提供应用程序更新)?那里有一个简单的方法(甚至是艰难的方式,有一些方向/指南)?
我可以花几百个小时在JavaFX 11中编写富有表现力,丰富且有用的桌面业务应用程序,但我该怎么做呢?
部署工具包(如JWrapper,InstallAnywhere等)是否适合Java 11的这个新时代?Gluon/openjfx.io可能有我错过的推荐或指南吗?我似乎无法从信誉良好的来源找到任何建议或指南,因为我们开发人员如何专注于编写前端代码,以便部署应用程序.
感谢您的帮助或指导.
我尝试在Android上运行一个简单的JavaFX应用程序.因此,我使用gradle来阅读javafxports入门指南来构建应用程序,但我被困在某个地方.我可以使用installDebug
Eclipse中的gradle任务在Android设备上构建和安装应用程序,但是,当我启动应用程序时,我得到一个黑屏.当我解压缩.apk
文件时,它不包含JavaFX应用程序的jar文件.我假设apk应该包含JavaFX应用程序jar文件,但我不知道如何将其包含在.apk
.
我还尝试使用gradle来构建JavaFX应用程序本身(jar文件),这很好.但是,我不知道把这个jar文件放在哪里可以包含在apk文件中.我读过我要把它放到一个dist
目录中,但我认为这只会在Netbeans中使用吗?我正在使用Eclipse gradle集成来构建项目.
这是我试过的.由于JavaFX应用程序就像HelloWorld示例应用程序一样简单,并且像魅力一样工作,我希望在我的gradle构建文件中出现配置错误.
build.gradle - 构建apk
apply plugin: 'me.tatarka.retrolambda'
apply plugin: 'android'
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'me.tatarka:gradle-retrolambda:2.5.0'
classpath 'com.android.tools.build:gradle:1.0.1'
}
}
repositories {
jcenter()
}
ext {
dalvikSdkHome = getProjectProperty('dalvikSDK')
dalvikSdkLib = dalvikSdkHome + '/rt/lib'
}
android {
compileSdkVersion 21
buildToolsVersion "21.1.1"
dexOptions {
preDexLibraries = false
}
sourceSets {
main {
jniLibs.srcDir file("${dalvikSdkLib}/")
assets.srcDirs = ['assets']
}
}
lintOptions {
abortOnError false
} …
Run Code Online (Sandbox Code Playgroud) 我从OpenJFX项目下载了JavaFX Jmod文件并将它们放在目录中G:\openjfx\javafx-jmods-11
.我正在使用没有JavaFX jmod的OpenJDK 11,JAVA_HOME/jmods
即它没有JavaFX发行版.
模块信息文件:
module gui{
requires javafx.graphics;
requires javafx.controls;
exports com.test;
}
Run Code Online (Sandbox Code Playgroud)
我编译如下:
javac -p G:\openjfx\javafx-jmods-11 -d mods --module-source-path src
src\gui\com\test\*.java src\gui\module-info.java
Run Code Online (Sandbox Code Playgroud)
编译成功.但我无法使用以下命令运行已编译的代码:
java -p G:\openjfx\javafx-jmods-11;mods -m gui/com.test.CreateGuiDemo
Run Code Online (Sandbox Code Playgroud)
但我得到以下错误:
Error occurred during initialization of boot layer
java.lang.module.FindException: Module javafx.graphics not found, required by gui
Run Code Online (Sandbox Code Playgroud) 这个问题可能是同一个问题的这一个,但现在看来,一个的提问者还没有添加足够的信息来获得一个有用的响应。
我正在尝试使用JDK和JavaFx SDK版本11.0.2运行JavaFx应用程序。
此代码完全按预期工作,从而产生一个空窗口:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class Main extends Application {
public void start(Stage primaryStage) throws Exception {
StackPane root = new StackPane();
primaryStage.setScene(new Scene(root, 420, 420));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试向添加标签StackPane
,则会引发异常。
import ...
import javafx.scene.control.Label;
public class Main extends Application {
public void start(Stage primaryStage) throws Exception {
StackPane root = new StackPane();
root.getChildren().add(new Label("42"));
primaryStage.setScene(new Scene(root, 420, 420));
primaryStage.show();
} …
Run Code Online (Sandbox Code Playgroud) 我从Java 8的官方站点下载了库JFoenix.jar.
我想将该库导入Scene Builder(Gluon).但是每当我尝试导入它时,我都没有来自该库的所有元素(它错过了例如JFXButton,JFXTextarea等).
我只能导入该库中的21个元素,我不知道我做错了什么.有人可以帮忙吗?
截图:
导入库
只导入21个元素:
在JavaFX 8 3D场景中是否可以沿着光线(例如PickRay)找到点,从3D空间中的任意点开始,使用一些3D方向向量,其中光线与网格中的三角形相交(MeshView内的TriangleMesh)?
我知道这是在Camera/MouseHandler中完成的,用于鼠标拾取,但我无法看到任何方式为任意光线做这件事.
当我在JavaFX中创建我的第一个3D游戏时 - 您可以使用鼠标从零件组装船只.这提出了一个问题,因为JAVAFX似乎没有用于将PerspectiveCamera屏幕2D坐标转换为场景3D空间的原生元素.
这是我正在努力实现的目标.鼠标移动的块应在假想的平面上移动,该平面始终相对于摄像机旋转90°:
我试图用三角函数解决问题而没有太大的成功.我没有附加代码片段,因为我正在寻找更通用的数学解决方案,但如果需要,我会提供它.
所有帮助将不胜感激!
期望的结果:
不幸的是,该javapackager
工具将被JDK 11删除 - 因为它是JavaFX的一部分,它也将被删除.因此,不再有"官方"和简单的方法来为Mac或Windows创建本机Java应用程序包.
我试图重新使用Java 9/10的javapackager(在Mac上my.app/Contents/MacOS/my
)生成的本机启动器文件,它们似乎仍然可以与JDK 11一起使用.但这有点像一个肮脏的解决方案.有关如何使用Java 11及更高版本本地打包和启动应用程序的任何想法(首选Mac平台)?
JavaFX 11是否跨平台?正如我在openjfx.org中看到的,我必须为每个平台下载版本.如果是这样,我可以以任何方式以跨平台形式使用它吗?我应该为每个java版本使用每个javafx版本吗?不要告诉我使用maven或类似的东西.我想编写一个跨平台的软件.而且每个操作系统的每个版本都没有多版本软件.我在检查操作系统后加载模块但我可以这样做吗?任何方式都有很多跨平台的库,即使它有本机代码,为什么OpenJFX不这样做呢?
javafx ×9
java ×6
javafx-11 ×6
3d ×2
javafx-3d ×2
openjfx ×2
android ×1
bundle ×1
gradle ×1
intersection ×1
java-11 ×1
javafx-8 ×1
javafxports ×1
jfoenix ×1
maven ×1
mouse ×1
raycasting ×1
release ×1
scenebuilder ×1