2015-07-20 4 views
0

Я пытаюсь создать приложение (игру), которое будет использовать java для работы с физикой, логикой и т. Д., Но будет использовать существующие библиотеки javascript для выполнения таких задач, как скрипты, графика, и ui, но при загрузке chart.js (и других библиотек) через nashorn nashorn.eval("load('chart.js')"); Я получаю следующее (или подобное для других библиотек) Exception in thread "main" javax.script.ScriptException: ReferenceError: "window" is not defined in chart.js at line number 668.Использование Nashorn/JavaScript для создания приложения GUI для Java

Возможно ли использовать эти библиотеки как есть, или какие-либо изменения по необходимости, и как я могу отображать скрипты в Java-приложении (или это возможно, с или без nashorn)?

Спасибо.

+0

JavaScript библиотеки, предназначенные для использования в составе веб-приложений, которые будут запускаться в среде браузера со всеми общими службами браузера (особенно, конечно, движок рендеринга, DOM и т. д.), , Ничего из этого не существует в приложении Java. – Pointy

ответ

1

Вы можете, однако, уговорить его запустить в контейнере JavaFX WebView. Я не пробовал использовать передовые JavaScript библиотеки в контейнере, но мой опыт:

  • Контейнер работает довольно хорошо,
  • трудно отладки приложений, работающих в нем, так как есть очень мало механизмов для этого ,
  • Механизмы обратной связи с приложением Java довольно хороши,
  • Вы можете предоставить настраиваемую обработку для протоколов приложений для URL-адресов, но мне не ясно, как это повлияет на модель безопасности WebView (кроме вы обновили обработчики потока http: или https: stream, которые, по-видимому, можно использовать с помощью URL.setURLStreamHandlerFactory способ).
+1

Webview работает на основе встроенного механизма обработки URL-адресов Java, который [настраивается] (http://media.techtarget.com/tss/static/articles/content/dm_protocolHandlers/java_protocol.pdf), хотя я предполагаю, что оригинал плакат, вероятно, не потребует обработки пользовательских протоколов. – jewelsea

+0

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

2

Как уже упоминалось, вы можете использовать JavaFX WebView для загрузки «браузера» скрипта HTML + в графический интерфейс Java-адаптера Nashorn. Вы можете загружать сгенерированный HTML-код, а также URL-адрес.

Простые примеры:

http://hg.openjdk.java.net/jdk9/dev/nashorn/file/f884dff432a7/samples/showsysprops.js http://hg.openjdk.java.net/jdk9/dev/nashorn/file/f884dff432a7/samples/showenv.js

Вы также можете получить доступ к "браузер" объекты JS/DOM от двигателя Насхорн и манипулируют с Насхорн сценария (если необходимо):

http://hg.openjdk.java.net/jdk9/dev/nashorn/file/f884dff432a7/samples/browser_dom.js

Учитывая, что вы собираетесь использовать библиотеки Java, вы также можете рассмотреть графический интерфейс JavaFX без WebView (или даже mix-n-match при необходимости ред). Несколько простых примеров здесь:

http://hg.openjdk.java.net/jdk9/dev/nashorn/file/f884dff432a7/samples/jsonviewer.js http://hg.openjdk.java.net/jdk9/dev/nashorn/file/f884dff432a7/samples/time_color.fx http://hg.openjdk.java.net/jdk9/dev/nashorn/file/f884dff432a7/samples/fxml_example.js

Несколько сложный пример загрузки стороннего HTML + скрипт в JavaFX GUI и расширение его из Насхорн сценария:

https://gist.github.com/sundararajana/7b19ec08a8878426af5e

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