webstart.html 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="viewport" content="width=device-width,initial-scale=1">
  6. <title>WebStart (JNLP) Deployment :: jMonkeyEngine Docs</title>
  7. <link rel="canonical" href="https://wiki.jmonkeyengine.org/docs/jme3/webstart.html">
  8. <meta name="generator" content="Antora 2.3.3">
  9. <link rel="stylesheet" href="../../_/css/site.css">
  10. <meta property="og:image" content="https://mitm001.github.io/docs.jmonkeyengine.org/_/img/iconx128.png">
  11. <meta property="og:description" content="WebStart (JNLP) Deployment">
  12. <meta property="og:title" content="jMonkeyEngine Docs">
  13. <link rel="icon" href="../../_/img/favicon.ico" type="image/x-icon">
  14. </head>
  15. <body class="article">
  16. <header class="header">
  17. <nav class="navbar">
  18. <div class="navbar-brand">
  19. <a class="navbar-item" href="https://wiki.jmonkeyengine.org">
  20. <img alt="" src="../../_/img/iconx128.png" width="32" type="image/x-icon" style="margin-right:16px">
  21. jMonkeyEngine Docs
  22. </a>
  23. <button class="navbar-burger" data-target="topbar-nav">
  24. <span></span>
  25. <span></span>
  26. <span></span>
  27. </button>
  28. </div>
  29. <div id="topbar-nav" class="navbar-menu">
  30. <div class="navbar-end">
  31. <div class="navbar-item theme-switch-wrapper">
  32. <label class="theme-switch" for="checkbox">
  33. <input type="checkbox" id="checkbox" />
  34. <div class="slider round"></div>
  35. </label>
  36. <p class="navlabel">Dark Mode</p>
  37. </div>
  38. <a class="navbar-item" href="https://github.com/jmonkeyengine/wiki">Github</a>
  39. </div>
  40. </div>
  41. </nav>
  42. </header>
  43. <div class="body">
  44. <div class="nav-container" data-component="docs" data-version="master">
  45. <aside class="nav">
  46. <div class="panels">
  47. <div class="nav-panel-menu is-active" data-panel="menu">
  48. <nav class="nav-menu">
  49. <h3 class="title"><a href="../documentation.html">Docs</a></h3>
  50. <ul class="nav-list">
  51. <li class="nav-item" data-depth="0">
  52. <ul class="nav-list">
  53. <li class="nav-item" data-depth="1">
  54. <a class="nav-link" href="../documentation.html">Getting Started</a>
  55. </li>
  56. <li class="nav-item" data-depth="1">
  57. <a class="nav-link" href="https://javadoc.jmonkeyengine.org/v3.3.2-stable">JavaDoc</a>
  58. </li>
  59. <li class="nav-item" data-depth="1">
  60. <button class="nav-item-toggle"></button>
  61. <a class="nav-link" href="../jme3.html">jMonkeyEngine 3</a>
  62. <ul class="nav-list">
  63. <li class="nav-item" data-depth="2">
  64. <button class="nav-item-toggle"></button>
  65. <span class="nav-text">Beginner Tutorials</span>
  66. <ul class="nav-list">
  67. <li class="nav-item" data-depth="3">
  68. <a class="nav-link" href="beginner/hello_simpleapplication.html">Hello SimpleApplication</a>
  69. </li>
  70. <li class="nav-item" data-depth="3">
  71. <a class="nav-link" href="beginner/hello_node.html">Hello Node</a>
  72. </li>
  73. <li class="nav-item" data-depth="3">
  74. <a class="nav-link" href="beginner/hello_asset.html">Hello Asset</a>
  75. </li>
  76. <li class="nav-item" data-depth="3">
  77. <a class="nav-link" href="beginner/hello_main_event_loop.html">Hello Main Event Loop</a>
  78. </li>
  79. <li class="nav-item" data-depth="3">
  80. <a class="nav-link" href="beginner/hello_input_system.html">Hello Input System</a>
  81. </li>
  82. <li class="nav-item" data-depth="3">
  83. <a class="nav-link" href="beginner/hello_material.html">Hello Material</a>
  84. </li>
  85. <li class="nav-item" data-depth="3">
  86. <a class="nav-link" href="beginner/hello_animation.html">Hello Animation</a>
  87. </li>
  88. <li class="nav-item" data-depth="3">
  89. <a class="nav-link" href="beginner/hello_picking.html">Hello Picking</a>
  90. </li>
  91. <li class="nav-item" data-depth="3">
  92. <a class="nav-link" href="beginner/hello_collision.html">Hello Collision</a>
  93. </li>
  94. <li class="nav-item" data-depth="3">
  95. <a class="nav-link" href="beginner/hello_terrain.html">Hello Terrain</a>
  96. </li>
  97. <li class="nav-item" data-depth="3">
  98. <a class="nav-link" href="beginner/hello_audio.html">Hello Audio</a>
  99. </li>
  100. <li class="nav-item" data-depth="3">
  101. <a class="nav-link" href="beginner/hello_effects.html">Hello Effects</a>
  102. </li>
  103. <li class="nav-item" data-depth="3">
  104. <a class="nav-link" href="beginner/hello_physics.html">Hello Physics</a>
  105. </li>
  106. </ul>
  107. </li>
  108. <li class="nav-item" data-depth="2">
  109. <button class="nav-item-toggle"></button>
  110. <span class="nav-text">Intermediate Tutorials</span>
  111. <ul class="nav-list">
  112. <li class="nav-item" data-depth="3">
  113. <button class="nav-item-toggle"></button>
  114. <span class="nav-text">Concepts</span>
  115. <ul class="nav-list">
  116. <li class="nav-item" data-depth="4">
  117. <a class="nav-link" href="intermediate/best_practices.html">Best Practices</a>
  118. </li>
  119. <li class="nav-item" data-depth="4">
  120. <a class="nav-link" href="intermediate/simpleapplication.html">Simple Application</a>
  121. </li>
  122. <li class="nav-item" data-depth="4">
  123. <a class="nav-link" href="features.html">Features</a>
  124. </li>
  125. <li class="nav-item" data-depth="4">
  126. <a class="nav-link" href="intermediate/optimization.html">Optimization</a>
  127. </li>
  128. <li class="nav-item" data-depth="4">
  129. <a class="nav-link" href="faq.html">FAQ</a>
  130. </li>
  131. </ul>
  132. </li>
  133. <li class="nav-item" data-depth="3">
  134. <button class="nav-item-toggle"></button>
  135. <span class="nav-text">Math Concepts</span>
  136. <ul class="nav-list">
  137. <li class="nav-item" data-depth="4">
  138. <a class="nav-link" href="math_for_dummies.html">Math For Dummies</a>
  139. </li>
  140. <li class="nav-item" data-depth="4">
  141. <a class="nav-link" href="intermediate/math.html">Math</a>
  142. </li>
  143. <li class="nav-item" data-depth="4">
  144. <a class="nav-link" href="math.html">More Math</a>
  145. </li>
  146. <li class="nav-item" data-depth="4">
  147. <a class="nav-link" href="rotate.html">Rotate</a>
  148. </li>
  149. <li class="nav-item" data-depth="4">
  150. <a class="nav-link" href="math_video_tutorials.html">Math Video Tutorials</a>
  151. </li>
  152. </ul>
  153. </li>
  154. <li class="nav-item" data-depth="3">
  155. <button class="nav-item-toggle"></button>
  156. <span class="nav-text">3D Graphics Concepts</span>
  157. <ul class="nav-list">
  158. <li class="nav-item" data-depth="4">
  159. <a class="nav-link" href="intermediate/multi-media_asset_pipeline.html">Multi-Media Asset Pipeline</a>
  160. </li>
  161. <li class="nav-item" data-depth="4">
  162. <a class="nav-link" href="scenegraph_for_dummies.html">Scenegraph for Dummies</a>
  163. </li>
  164. <li class="nav-item" data-depth="4">
  165. <a class="nav-link" href="beginner/hellovector.html">Hello Vector</a>
  166. </li>
  167. <li class="nav-item" data-depth="4">
  168. <a class="nav-link" href="terminology.html">Terminology</a>
  169. </li>
  170. <li class="nav-item" data-depth="4">
  171. <a class="nav-link" href="intermediate/how_to_use_materials.html">How to Use Materials</a>
  172. </li>
  173. <li class="nav-item" data-depth="4">
  174. <a class="nav-link" href="intermediate/transparency_sorting.html">Transparency and Sorting</a>
  175. </li>
  176. <li class="nav-item" data-depth="4">
  177. <a class="nav-link" href="external/blender.html">Importing from Blender</a>
  178. </li>
  179. <li class="nav-item" data-depth="4">
  180. <a class="nav-link" href="external/3dsmax.html">Importing from 3DS Max</a>
  181. </li>
  182. </ul>
  183. </li>
  184. </ul>
  185. </li>
  186. </ul>
  187. </li>
  188. <li class="nav-item" data-depth="1">
  189. <a class="nav-link" href="../logo.html">Logo Usage</a>
  190. </li>
  191. <li class="nav-item" data-depth="1">
  192. <a class="nav-link" href="../bsd_license.html">License</a>
  193. </li>
  194. <li class="nav-item" data-depth="1">
  195. <a class="nav-link" href="../github_tips.html">Github Tips</a>
  196. </li>
  197. </ul>
  198. </li>
  199. <li class="nav-item" data-depth="0">
  200. <button class="nav-item-toggle"></button>
  201. <span class="nav-text">SDK</span>
  202. <ul class="nav-list">
  203. <li class="nav-item" data-depth="1">
  204. <a class="nav-link" href="../sdk.html">jMonkeyEngine SDK</a>
  205. </li>
  206. </ul>
  207. </li>
  208. </ul>
  209. </nav>
  210. </div>
  211. <div class="nav-panel-explore" data-panel="explore">
  212. <div class="context">
  213. <span class="title">Docs</span>
  214. <span class="version">master</span>
  215. </div>
  216. <ul class="components">
  217. <li class="component is-current">
  218. <span class="title">Docs</span>
  219. <ul class="versions">
  220. <li class="version is-current is-latest">
  221. <a href="../documentation.html">master</a>
  222. </li>
  223. </ul>
  224. </li>
  225. <li class="component">
  226. <span class="title">Wiki UI</span>
  227. <ul class="versions">
  228. <li class="version is-latest">
  229. <a href="../../wiki-ui/index.html">master</a>
  230. </li>
  231. </ul>
  232. </li>
  233. </ul>
  234. </div>
  235. </div>
  236. </aside>
  237. </div>
  238. <main class="article">
  239. <div class="toolbar" role="navigation">
  240. <button class="nav-toggle"></button>
  241. <nav class="breadcrumbs" aria-label="breadcrumbs">
  242. <ul>
  243. <li><a href="../documentation.html">Docs</a></li>
  244. <li><a href="webstart.html">WebStart (JNLP) Deployment</a></li>
  245. </ul>
  246. </nav>
  247. <div class="edit-this-page"><a href="https://github.com/jMonkeyEngine/wiki/edit/master/docs/modules/ROOT/pages/jme3/webstart.adoc">Edit this Page</a></div>
  248. </div>
  249. <div class="content">
  250. <article class="doc">
  251. <h1 class="page">WebStart (JNLP) Deployment</h1>
  252. <div id="preamble">
  253. <div class="sectionbody">
  254. <div class="paragraph">
  255. <p>When you <a href="../sdk/application_deployment.html" class="page">use the jMonkeyEngine SDK to deploy your application</a>, you can configure the project to build files required for WebStart automatically. If you use another IDE, or work on the command line, use the following tips to set up WebStart correctly:</p>
  256. </div>
  257. </div>
  258. </div>
  259. <div class="sect1">
  260. <h2 id="problem-statement"><a class="anchor" href="#problem-statement"></a>Problem Statement</h2>
  261. <div class="sectionbody">
  262. <div class="paragraph">
  263. <p><strong>Problem:</strong></p>
  264. </div>
  265. <div class="paragraph">
  266. <p>When running under WebStart, jMonkeyEngine may not have permission to extract the native libraries to the current directory.</p>
  267. </div>
  268. <div class="paragraph">
  269. <p>*Solution: *</p>
  270. </div>
  271. <div class="paragraph">
  272. <p>You can instruct WebStart to load the native libraries itself using the JNLP file, and then instruct jME3 not to try to do so itself.</p>
  273. </div>
  274. </div>
  275. </div>
  276. <div class="sect1">
  277. <h2 id="simple-way"><a class="anchor" href="#simple-way"></a>Simple way</h2>
  278. <div class="sectionbody">
  279. <div class="paragraph">
  280. <p>You can import the LWJGL JNLP extension directly into your extension, however be aware that your application will break whenever they update their jars. Simply add this line to your JNLP:</p>
  281. </div>
  282. <div class="listingblock">
  283. <div class="content">
  284. <pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml">&lt;extension name="lwjgl" href="http://lwjgl.org/webstart/2.7.1/extension.jnlp" /&gt;</code></pre>
  285. </div>
  286. </div>
  287. </div>
  288. </div>
  289. <div class="sect1">
  290. <h2 id="reliable-way"><a class="anchor" href="#reliable-way"></a>Reliable way</h2>
  291. <div class="sectionbody">
  292. <div class="sect2">
  293. <h3 id="native-jars"><a class="anchor" href="#native-jars"></a>Native jars</h3>
  294. <div class="paragraph">
  295. <p>You can download the LWJGL native jars from their site, or to ensure you&#8217;re using the exact same version as bundled with your jME3 release, make your own:</p>
  296. </div>
  297. <div class="listingblock">
  298. <div class="content">
  299. <pre class="highlightjs highlight"><code>mkdir tmp
  300. cd tmp
  301. jar xfv ../jME3-lwjgl-natives.jar
  302. cd native
  303. for i in *; do
  304. cd $i
  305. jar cfv ../../native_$i.jar .
  306. cd ..
  307. done</code></pre>
  308. </div>
  309. </div>
  310. <div class="paragraph">
  311. <p>For Windows:</p>
  312. </div>
  313. <div class="listingblock">
  314. <div class="content">
  315. <pre class="highlightjs highlight"><code>@echo off
  316. md tmp
  317. cd tmp
  318. "%JDK_HOME%\bin\jar" -xfv ..\jME3-lwjgl-natives.jar
  319. cd native
  320. for /D %%i in ("*") do (
  321. cd %%i
  322. "%JDK_HOME%\bin\jar" -cfv ..\..\native_%%i%.jar .
  323. cd ..
  324. )
  325. cd ..</code></pre>
  326. </div>
  327. </div>
  328. <div class="paragraph">
  329. <p>Remember to sign all the jar files and move them into the right place from the tmp directory.</p>
  330. </div>
  331. </div>
  332. <div class="sect2">
  333. <h3 id="jnlp-file"><a class="anchor" href="#jnlp-file"></a>JNLP file</h3>
  334. <div class="paragraph">
  335. <p>Add the following to your JNLP file:</p>
  336. </div>
  337. <div class="listingblock">
  338. <div class="content">
  339. <pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml"> &lt;resources os="Windows"&gt;
  340. &lt;j2se version="1.4+"/&gt;
  341. &lt;nativelib href="native_windows.jar"/&gt;
  342. &lt;/resources&gt;
  343. &lt;resources os="Linux"&gt;
  344. &lt;j2se version="1.4+"/&gt;
  345. &lt;nativelib href="native_linux.jar"/&gt;
  346. &lt;/resources&gt;
  347. &lt;resources os="Mac OS X"&gt;
  348. &lt;j2se version="1.4+"/&gt;
  349. &lt;nativelib href="native_macosx.jar"/&gt;
  350. &lt;/resources&gt;</code></pre>
  351. </div>
  352. </div>
  353. </div>
  354. <div class="sect2">
  355. <h3 id="set-low-permissions-mode"><a class="anchor" href="#set-low-permissions-mode"></a>Set low-permissions mode</h3>
  356. <div class="paragraph">
  357. <p>In your main() method, if running under WebStart, tell jME3 it is running in a low-permission environment so that it doesn&#8217;t try to load the natives itself:</p>
  358. </div>
  359. <div class="listingblock">
  360. <div class="content">
  361. <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java"> public static void main(String[] args)
  362. {
  363. if (System.getProperty("javawebstart.version") != null) {
  364. JmeSystem.setLowPermissions(true);
  365. }</code></pre>
  366. </div>
  367. </div>
  368. </div>
  369. </div>
  370. </div>
  371. </article>
  372. <aside class="toc sidebar" data-title="Contents" data-levels="2">
  373. <div class="toc-menu"></div>
  374. </aside>
  375. </div>
  376. </main>
  377. </div>
  378. <footer class="footer">
  379. <p>Copyright 2020 jMonkeyEngine Wiki Contributors. Licensed BSD-3.</p>
  380. </footer>
  381. <script src="../../_/js/site.js"></script>
  382. <script async src="../../_/js/vendor/highlight.js"></script>
  383. </body>
  384. </html>