2013-07-08 2 views
0

Есть ли способ узнать, как было запущено приложение приложения Javafx2?Как узнать, было ли приложение JavaFX запущено WebStart?

I.E. был запущен через веб-ссылку или был запущен через ярлык на рабочем столе?

Причина, по которой мне нужно знать, было ли запущено приложение с веб-начала или значка на рабочем столе, является то, что некоторые параметры передаются через JNLP, которые приложение не использует при запуске с рабочего стола, и нет другого способа что (что я знаю) приложение будет знать, если эти параметры не пройдены.

Любые указатели были бы полезны.

+0

Спасибо за редактирование вопроса Сергей. Сейчас это выглядит гораздо более объяснительным. Я попробую эту идею, предложенную ниже. Будет держать вас в курсе. – Aspirant

+0

Я пробовал первые два подхода, перечисленные ниже: например, чтение свойства (например: hasRunOnce) из 'PersistenceService' и чтение WebContext' и' SecurityManager', но проблема не была решена из-за какой-то проблемы или другой. Эксперты, если вы можете придумать какой-либо другой подход, пожалуйста, дайте мне знать. – Aspirant

ответ

0

AFAIK, нет хорошего способа, и вам необходимо использовать побочный эффект режима запуска.

Вы можете выбрать использовать следующие из них:

  1. Applet всегда WebContext
  2. Applet/JNLP всегда SecurityManager
  3. Desktop запустить обычно не 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(); 

Другой вариант Can I find out if the java program was launched using java or javaw

+0

Я попробовал вышеуказанное решение. Но я попытался запустить приложение из ярлыка, созданного на рабочем столе, и он все еще показывался так, как будто он был запущен через jnlp. Возможно, я неправильно сформулировал свой вопрос. Пожалуйста, порекомендуйте. – Aspirant

+0

Или, возможно, ярлык на рабочем столе просто имитирует поведение, как если бы приложение было из Интернета, потому что изначально он использует файл jnlp для запуска приложения. – Aspirant

+0

oh, ярлык на рабочем столе, извините, я не понял вопрос –

0

(Me) ..Это будет запущен только не от значка на рабочем столе один сингл (первый) раз?

Да, это правильно.

OK. Это выполнимо.

В коде проверьте с помощью PersistenceService API JNLP ключ/значение (например, has-run-once/true). Если это не существуют, используйте свойства, определенные в JNLP, и установите значение.

Вот небольшой demo. of the PersistenceService.

Смежные вопросы