我正在开发一个需要进行一些计算并且需要在线可用的 java 应用程序。
我从 2005 年开始使用 Java 进行开发,但从来不需要将任何东西放到网上,我一直使用 RMI。
我研究了如何创建小程序并成功地将我的桌面应用程序转换为小程序(应用程序生命周期,将 JFrame 转换为 JApplet 等)
我注意到性能确实变慢了,所以我尝试了其他方法。我阅读了 Java Web Start,并开始思考它。
找到这篇文章: http ://docs.oracle.com/javase/tutorial/deployment/deploymentInDepth/runAppletFunction.html并按照它我做了以下事情(写下来供将来的读者参考):
- 制作了我的应用程序的罐子并签名(显然名称已更改)
编写了以下 JNLP:
<?xml version="1.0" encoding="UTF-8"?> <jnlp href="appJNLP.jnlp"> <information> <title>Software title</title> <vendor>Society name</vendor> <offline-allowed /> </information> <resources> <j2se version ="1.6+" initial-heap-size="256m" max-heap-size="1024m" href="http://java.sun.com/products/autodl/j2se" /> <jar href="app.jar" main="true" /> <jar href="mysql-connector-java-5.1.20-bin.jar"/> <jar href="poi-3.8-20120326.jar"/> <jar href="forms-1.3.0.jar"/> </resources> <applet-desc name="Name" main-class="mainClass" width="1024" height="700"/> </jnlp>
编写了以下 HTML 页面:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Titolo</title> </head> <body> <script src="http://www.java.com/js/deployJava.js"></script> <script> var attributes = {code:'mainClass.class', archive:'app.jar,mysql-connector-java-5.1.20-bin.jar,poi-3.8-20120326.jar,forms-1.3.0.jar', width:1024, height:700} ; var parameters = {jnlp_href:'appJNLP.jnlp'} ; var version = '1.6' ; deployJava.runApplet(attributes, parameters, version); </script> <noscript>This page requires JavaScript.</noscript> </body> </html>
将以下文件结构放在我的 Tomcat webapp 文件夹中:
webapps\app app.jar appJNLP.jnlp page.html mysql-connector-java-5.1.20-bin.jar poi-3.8-20120326.jar forms-1.3.0.jar
如您所见,我选择了混合部署方式(在此方法使小程序能够在旧的和下一代 Java 插件软件上运行之前发布的链接中说明)。我想我做的一切都很好。小程序在网页中加载,但速度很慢......我在 jnlp 部分中添加了内存参数,在此响应之后:如何启动具有更多内存的 Java 小程序?(initial-heap-size="256m" max-heap-size="1024m") 但它们似乎被忽略了。我还尝试在我的 2gb RAM 机器上放置错误值,例如 initial-heap-size="5000m",但小程序仍然加载并且仍然很慢。控制台在 jnlp 文件的运行结束后显示此内容,但小程序仍在运行:
Match: selecting maxHeap: 8388608000
Match: selecting InitHeap: 5242880000
Match: digesting vmargs: null
Match: digested vmargs: [JVMParameters: isSecure: true, args: ]
Match: JVM args after accumulation: [JVMParameters: isSecure: true, args: ]
Match: digest LaunchDesc: http://localhost:8090/TestServer/gestioneoneri.jnlp
Match: digest properties: []
Match: JVM args: [JVMParameters: isSecure: true, args: ]
Match: endTraversal ..
security: --- parseCommandLine converted : -Xms5000m
into:
[-Xms5000m]
Match: JVM args final: -Xmx8000m -Xms5000m
它不应该抛出异常吗?
现在我的问题是:
- 如何确定代码是在 JNLP 环境中而不是在 applet 环境中执行的?我看不到 Java Web Start 徽标。正常吗?
- 如何将初始和最大内存大小增加到更多的人类值?
- 我需要将这个软件嵌入到网页中。由于我不知道我使用的是 applet 还是 java web start 应用程序,我该如何改善我的用户体验?例如,我正在谈论扩展 JApplet 或 JFrame。如果我无法增加内存,我应该如何将我的小程序转换为 jws 应用程序?
我愿意接受建议。感谢您的时间!
安德烈亚