【问题标题】:chrome crash with method call of java in javascriptjavascript中java的方法调用导致chrome崩溃
【发布时间】:2012-03-29 20:04:28
【问题描述】:

我正在尝试在 html5 和 javascript 中使用 java 应用程序,但是当我尝试以下操作时 Chrome 总是崩溃:

html5 文档中我有这个:

<FORM>
<INPUT type="button" value="call JAVA" onClick = "test()">
</FORM>

<object name="application" type="application/x-java-applet" height="300" width="550" >
<param name="code" value="loader"/>
<param name="java_arguments" value="-Djnlp.packEnabled=true"/>
</object>

javascript 文件中我使用了这个函数(onclick test()-function)

function test() {
    var app = document.getElementById("applet_test");
    alert("Screen Dimension\r\n  width:" +
         app.getScreenWidth() + " height:" +
         app.getScreenHeight() );
}

最后是 applet_test.java 文件:

import java.applet.*;
import java.awt.*;

public class applet_test extends Applet 
{   public int getScreenWidth() {
        return Toolkit.getDefaultToolkit().getScreenSize().width;
      }
      public int getScreenHeight() {
        return Toolkit.getDefaultToolkit().getScreenSize().height;
      }
    public void main(String [] args) {

    }
}

有人知道为什么这不起作用吗? Eclipse 还抱怨在 html5 文档中使用小程序:

Element (applet) is obsolete. Its use is discouraged in HTML5

这会导致麻烦吗?如果是这样,如何使用元素获得相同的结果?

【问题讨论】:

  • 我在帖子中添加了警告
  • Element (applet) is obsolete. Its use is discouraged in HTML5 这很奇怪,因为 HTML sn-p 使用了 object 元素。但除此之外,最好的解决方案是使用applet info. page 中提到的deployJava.js 嵌入小程序。它被设计为在加载它的任何浏览器中工作。它检查用户是否具有运行小程序所需的最少 Java(如果没有,则帮助他们更新)然后以该预期的任何形式写入任何元素(版本)那个浏览器。哦,它对验证服务是“不可见的”。 ;)
  • @Andrew Thompson 很棒的信息。我没有意识到这一点。
  • @rickz deployJava.js 只是过去几年为小程序引入的伟大小调整之一。人们经常说“applet 早在几年前就死了”,但这显然不是 Sun 在他们整个 ..sunset 中的想法。

标签: java javascript html applet


【解决方案1】:

这对我有用。

<!DOCTYPE html>
<html lang="en"><FORM>
<head>
<script>
function test() {
    var app = document.applet_test;
    alert("Screen Dimension\r\n  width:" + app.getScreenWidth()
      + " height:" + app.getScreenHeight());
}
</script>
<body>
<INPUT type="button" value="call JAVA"
   onClick = "test()">
</FORM>
<object name="applet_test" type="application/x-java-applet" height="300" width="550" >
<param name="code" value="loader.class"/>
</object>
</body>
</html>

【讨论】:

  • 谢谢你的代码,我得到了它。现在我看到了 java 加载屏幕,但它并没有随着加载而停止。也许是因为我给对象一个大小,而没有显示任何东西。这也可能是 java 文件本身的问题(我用当前版本更新了我的版本)
  • 你是什么意思“但它不会随着加载而停止”?
  • 此图像在加载时显示:google.be/imgres?imgurl=http://www.w-uh.com/images/0301/… 并保留
  • 它对我来说消失了。您是否尝试过 height="1" width="1" ?此外,您可以尝试使用样式在屏幕外某处进行绝对定位。
  • 谢谢你的建议,现在没有显示了,唯一剩下的问题是java类的de方法还没有找到。我收到消息:未捕获的类型错误:对象 # 没有方法 'getScreenWidth'
【解决方案2】:

更改 var app = document.getElementById("applet_test");到

var app = document.applet_test;  

Eclipse 还抱怨在 html5 文档中使用小程序。

可能是因为 applet 标签已被弃用。看底部 https://eyeasme.com/Shayne/HTML5_APPLETS/

【讨论】:

  • 你给我的链接确实很有帮助,但它确实解决了我所有的问题。我将我的小程序更改为更通用的对象,并为我的 java 类添加了一个主过程。示例中唯一找不到的是如何在 javascript 中调用该 java 类的方法。 (我用我的更改编辑了我的帖子)
  • “你给我的链接确实很有帮助,但它确实解决了我所有的问题。” 在 SO,它应该是“每个问题一个答案”。请不要指望我们在一个问题中对这个小程序的“15 件事”进行排序。一次完成一件事,将答案标记为正确,然后继续下一部分。
  • 来自链接: "NEW WAY: Java Applet in HTML5 (uses object tag)" 实际上,Sun/Oracle 已经提供了一段时间applet info. page 中提到的deployJava.js。使用它而不是硬编码 appletobject 元素。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-18
  • 1970-01-01
  • 2013-06-08
  • 1970-01-01
相关资源
最近更新 更多