0

我正在开发一个需要进行一些计算并且需要在线可用的 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 应用程序?

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

安德烈亚

4

1 回答 1

0

emm...很多抽象的问题

我会试着回答一点

所以...

  • 如何确定代码是在 JNLP 环境中而不是在 applet 环境中执行的?我看不到 Java Web Start 徽标。正常吗?

如果您使用 JNLP 启动它并且启动成功,则可以确定它是由 JAWS 启动的;我也没有看到 JAWS 徽标……但这很正常。我不记得因为什么 JRE 升级它消失了,但是看到你的小程序已经被 JRE 运行,你可以简单地观察临时 Internet 文件缓存(查看它的 jnlp 文件)

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

我记得,有一个 jnlp 参数使这个......它就像

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

有关更多详细信息,请参阅jnlp 语法...

  • 我需要将这个软件嵌入到网页中。由于我不知道我使用的是 applet 还是 java web start 应用程序,我该如何改善我的用户体验?例如,我说的是扩展 JApplet 或 JFrame。如果我无法增加内存,我应该如何将我的小程序转换为 jws 应用程序

在 JAWS 应用程序的情况下,我记得,在应用程序启动期间应该显示一个 JAWS 徽标。所以你可以轻松地将小程序与应用程序分开我猜......使用应用程序或小程序完全取决于您的项目要求......

于 2012-10-27T02:03:13.827 回答