如何确定JavaFX应用程序是否由WebStart运行?

如何确定JavaFX应用程序是否由WebStart运行?,java,javafx-2,java-web-start,Java,Javafx 2,Java Web Start,有没有办法了解Javafx2应用程序是如何启动的 即,是通过web start链接启动还是通过桌面快捷方式启动 我需要知道应用程序是从web start还是从桌面图标启动的原因是,有一些参数是通过JNLP传递的,当从桌面图标启动时,应用程序不会使用这些参数,如果这些参数没有传递,应用程序将无法(据我所知)知道 任何指针都会有帮助。好吧,并没有好的方法,你们需要使用运行模式的副作用 您可以选择使用下一个选项: 小程序始终具有WebContext Applet/JNLP始终具有SecurityMan

有没有办法了解Javafx2应用程序是如何启动的

即,是通过web start链接启动还是通过桌面快捷方式启动

我需要知道应用程序是从web start还是从桌面图标启动的原因是,有一些参数是通过JNLP传递的,当从桌面图标启动时,应用程序不会使用这些参数,如果这些参数没有传递,应用程序将无法(据我所知)知道


任何指针都会有帮助。

好吧,并没有好的方法,你们需要使用运行模式的副作用

您可以选择使用下一个选项:

  • 小程序始终具有WebContext
  • Applet/JNLP始终具有SecurityManager
  • 桌面运行通常没有SecurityManager(不完全可靠),也从来没有WebContext
  • 请参见下一代码:

        Pane root = new VBox(5);
    
        boolean gotSecurityManager = System.getSecurityManager() != null;
        boolean gotWebContext = getHostServices().getWebContext() != null;
    
        root.getChildren().addAll(
                new Label("desktop = " + (!gotSecurityManager && !gotWebContext)),
                new Label("jnlp = " + (gotSecurityManager && !gotWebContext)),
                new Label("applet = " + gotWebContext)
                );
    
        Scene scene = new Scene(root, 500, 250);
    
        primaryStage.setTitle("Hello World!");
        primaryStage.setScene(scene);
        primaryStage.show();
    
    另一个选择是

    (我)…它将只一次(第一次)从桌面图标启动吗

    是的,没错

    嗯。这是可行的

    在代码中,使用JNLP API的
    PersistenceService
    检查键/值(例如
    已运行一次
    /
    true
    )。如果不存在,请使用JNLP中定义的属性并设置该值


    这是一个小问题。

    感谢您编辑问题Sergey。现在看来解释得更清楚了。我将尝试你在下面提出的想法。我尝试了下面列出的前两种方法:即从
    PersistenceService
    读取属性(如:hasrunce),然后读取WebContext`和
    SecurityManager
    ,但由于某些问题,问题没有得到解决。专家们,如果你能想出任何其他方法,请告诉我。我尝试了上述解决方案。但我试着从桌面上创建的快捷方式启动应用程序,它仍然显示出好像是通过jnlp启动的。也许我把问题说错了。请告知。或者桌面上的快捷方式可能只是模仿应用程序来自web的行为,因为它在内部使用jnlp文件启动应用程序。哦,桌面快捷方式,抱歉,我误解了一个问题,是否可以通过单击从webstart安装javafx应用程序时创建的桌面快捷方式来确定应用程序是否已启动?