我正在开发一个需要进行一些计算的Java应用程序,需要在线提供。
我从2005年开始用Java开发,但从来没有把任何东西放到网上,我总是使用RMI。
我研究了如何创建applet并成功将我的桌面应用程序转换为applet(应用applet生命周期,将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
正如您所看到的,我选择了混合部署方式(在此方法之前发布的链接中说明了applet能够在旧版和下一代Java插件软件上运行)。 我想我做的一切都很好。 applet在网页中加载,但速度非常慢...... 我在此响应之后的jnlp部分添加了内存参数:How can I start an Java applet with more memory?(initial-heap-size =“256m”max-heap-size =“1024m”)但它们似乎被忽略了。我尝试在我的2gb RAM机器上放置假值,比如initial-heap-size =“5000m”,但是applet仍然加载并且仍然很慢。 控制台在jnlp文件的纲要之后显示,但applet仍在运行:
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
不应该抛出异常吗?
现在我的问题是:
我愿意接受建议。 谢谢你的时间!
安德烈
答案 0 :(得分:0)
嗯......很多抽象的问题
我会尝试回答一下
因此...
如果您使用JNLP启动它并且启动成功,您可以确定它是由JAWS启动的; 我也没有看到JAWS徽标......但这很正常。我不记得,因为JRE升级它消失但是看到你的applet已经由JRE运行你可以简单地观看临时互联网文件缓存(看看它的jnlp文件)
我记得,有一个jnlp param使得它......就像
<j2se version="1.3" initial-heap-size="64m" max-heap-size="128m"/>
请参阅jnlp syntax了解更多详情......
对于JAWS应用程序,我记得,应用程序启动时应显示JAWS徽标。所以你可以轻松地将applet与应用程序分开......我猜...使用应用程序或applet完全取决于你的项目需求......