我最近一直在努力开发applet。我一直试图用JNLP和“deployJava.js”脚本启动它。问题是,这是我正在开发的内存密集型小程序,并且肯定需要的不仅仅是JVM通常给出的基本内存分配。
我尝试使用JNLP中j2se元素的max-heap-size属性来设置它。这确实有效,但问题是applet似乎以某种方式重新启动,因为我得到两个打开的“java控制台”窗口。一个没有收到applet的输出,而另一个显示我输出的日志信息。此外,小程序似乎没有运行。但是,如果我在不关闭浏览器的情况下清除类加载器缓存并重新加载页面,则applet将使用正确调整的最大堆大小和所有内容。
我不知道造成这种奇怪行为的原因,但我迫切需要一个解决方案。如果我没有设置最大堆大小,则applet表现良好(除了内存不足。)另外,如果我在HTML设置中使用applet
标记,则通过<param name="java_arguments" value="-Xmx1g">
来获取最大堆大小工作良好。但是,我知道applet标签已弃用,可能不适用于所有浏览器,因此我不想坚持使用它。我希望有人可以提供一些我在这里缺少的信息。
底线:当我添加max-heap-size
时,applet无法正常运行。我需要帮助找出原因。
这是HTML / JavaScript / PHP:
<script src="http://www.java.com/js/deployJava.js"></script>
<script>
var attributes = {
code: 'floodsim.SimApplet.class', archive: 'SimApplet.jar',
width: 500, height: <?php echo "$height"; ?>};
var parameters = {
<?php
echo "imgwidth: $imgwidth, imgheight: $imgheight, imgcount: $imgcount, key: '$key',";
?> jnlp_href: 'simApplet.jnlp'};
deployJava.runApplet(attributes, parameters, '1.6');
</script>
这是JNLP(我也使用JaNeLa来检查它):
<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase="http://localhost:8888/floodsim/simulation/" href="simApplet.jnlp">
<information>
<title>Simulation Viewer</title>
<vendor>Seth Gunnells</vendor>
<offline-allowed />
</information>
<resources>
<!-- Application Resources -->
<j2se version="1.6+" max-heap-size="1024m" />
<jar href="SimApplet.jar" main="true" />
</resources>
<applet-desc
name="Simulation Viewer"
main-class="edu.tntech.floodsim.SimApplet"
width="500"
height="600">
</applet-desc>
</jnlp>
答案 0 :(得分:1)
JNLP中没有任何地方指定max-heap-size
。给出的例子是:
<j2se version="1.3" initial-heap-size="64m" max-heap-size="128m"/>
applet元素中没有任何地方指定Java arguments。给出的例子是:
<PARAM name="java_arguments" value="-Xmx128m">