在 JavaFx 和 Webstart (JNLP) 中提供触摸控制

Providing touch control in JavaFx and Webstart (JNLP)

我想通过 java-vm-args 在应用程序中启用触摸控制,该应用程序是通过带有 JNLP 文件的 webstart 部署的。在 IDE (Intellij) 本地,我提供了以下 java-vm-args,它正在工作:

-Dcom.sun.javafx.isEmbedded=true -Dcom.sun.javafx.virtualKeyboard=javafx 

此外还使用了以下属性,例如对于 TextField,如果在 IDE 中启动,上面提到的 args:

,它工作正常
 myTextField.getProperties().put("vkType", "text");

修改为 JNLP 的 webstart 不工作:

[...]
<resources>
  <j2se version="1.8+" java-vm-args="-XX:+UseConcMarkSweepGC -Xmx1024m  -Dcom.sun.javafx.isEmbedded=true -Dcom.sun.javafx.virtualKeyboard=javafx"/>
[...]

应用程序记录传递的 java-vm-args,因此我能够检查参数是否传递。除了上面提到的 args.

之外,所有需要的 args 都通过了

如何通过 webstart / JNLP 提供上述 args

也许您对 java-vm-args 的某些论点没有得到 JNLP 的明确支持,如 here 所述(向下滚动至:"The following java-vm-args are supported by this version")。

对于触摸控制添加:-Dcom.sun.javafx.touch=true(在此处找到:https://community.oracle.com/thread/3548421

其中一些可通过编程获得:

例如检查是否嵌入:

public void start(Stage stage) {
    boolean isEmbedded = (stage.getWidth() > 0);
    ...
}

其他可以通过加载 JNLP 的 html 页面设置。在这里查看所有可用的内容:

http://docs.oracle.com/javase/8/docs/technotes/guides/deploy/deployment_toolkit.html#BABJHEJA

从 Netbeans 上的 JavaFX 项目生成的 JNLP 如下所示:

<?xml version="1.0" encoding="utf-8"?>
<jnlp spec="1.0" xmlns:jfx="http://javafx.com" href="JavaFXPreloaderApp.jnlp">
  <information>
    <title>JavaFXPreloaderApp</title>
    <vendor>None</vendor>
    <description>null</description>
    <offline-allowed/>
  </information>
  <resources>
    <j2se version="1.6+" java-vm-args="-Xms100m -Xmx1024m "  href="http://java.sun.com/products/autodl/j2se"/>
    <jar href="lib/JavaFXPreloader.jar" size="3760" download="progress" />
    <jar href="JavaFXPreloaderApp.jar" size="5636" download="eager" />
  </resources>
  <applet-desc  width="800" height="600" main-class="com.javafx.main.NoJavaFXFallback"  name="JavaFXPreloaderApp" >
    <param name="requiredFXVersion" value="8.0+"/>
  </applet-desc>
  <jfx:javafx-desc  width="800" height="600" main-class="application.JavaFXPreloaderApp"  name="JavaFXPreloaderApp"  preloader-class="preloader.JavaFXPreloader"/>
  <update check="always"/>
</jnlp>