增加通过jnlp启动的applet的内存

时间:2012-10-26 16:33:10

标签: java memory-management applet java-web-start

我正在开发一个需要进行一些计算的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

不应该抛出异常吗?

现在我的问题是:

  • 如何确定代码是在JNLP环境中而不是在applet环境中执行的?我看不到Java Web Start徽标。这是正常的吗?
  • 如何将初始和最大内存大小增加到更多人类值?
  • 我需要将此软件嵌入网页中。由于我不知道我使用的是applet还是java web start应用程序,我如何才能改善用户体验?我正在谈论扩展JApplet或JFrame例如..在我无法增加内存的情况下,我应该如何将我的applet转换为jws应用程序?

我愿意接受建议。 谢谢你的时间!

安德烈

1 个答案:

答案 0 :(得分:0)

嗯......很多抽象的问题

我会尝试回答一下

因此...

  • 我怎样才能确定代码是在JNLP中执行的 环境而不是applet环境?我看不到Java Web 开始徽标。这是正常的吗?

如果您使用JNLP启动它并且启动成功,您可以确定它是由JAWS启动的; 我也没有看到JAWS徽标......但这很正常。我不记得,因为JRE升级它消失但是看到你的applet已经由JRE运行你可以简单地观看临时互联网文件缓存(看看它的jnlp文件)

  • 如何将初始和最大内存大小增加到更多人类值?

我记得,有一个jnlp param使得它......就像

<j2se version="1.3" initial-heap-size="64m" max-heap-size="128m"/>

请参阅jnlp syntax了解更多详情......

  • 我需要将此软件嵌入网页中。既然我没有 知道我使用的是applet还是java web start应用程序, 如何改善用户体验?我正在谈论扩展 以JApplet或JFrame为例..在我无法增加内存的情况下 我应该如何将我的applet转换为jws app

对于JAWS应用程序,我记得,应用程序启动时应显示JAWS徽标。所以你可以轻松地将applet与应用程序分开......我猜...使用应用程序或applet完全取决于你的项目需求......