您的位置:首页 > 移动开发

【备忘】Java的Applet调用第三方jar包,web调用问题解决方案

2011-12-08 10:44 453 查看
昨天和今天主要纠结于Applet在Web调用不成功的问题。今天两天的奋战,终于将问题解决,

贴出来问题的解决方案,方便自己和他人。



情景一:单独的Applet,网页使用:

第一步,本地新建一个Applet文件(如DemoApplet.java),重写paint方法。代码如下:

  public void paint(Graphics g )

  {

   g.drawString("Hello World!",5,35);

  }

在运行Applet这个文件时,会自动调用这个方法,写出"Hello World!"几个字。



第二步,新建网页htDemo.html

代码如下:



<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<title>My applet 'DemoApplet' starting page</title>

</head>

<body>

<applet codebase="."

code="DemoApplet.class"

name="DemoApplet"

width="320"

height="240">

</applet>

</body>

</html>



参数说明:

  1:code:指定applet需要应用类的class。

  2:codebase:指定applet类的存放路径。

  3:width:指定显示applet的空白区域宽度。

  4:height:指定显示applet的空白区域的高度。

5.name:指定applet的名字,可选。



对于codebase的处理要格外小心,如果把编译后的DemoApplet.class和htDemo.html放在同级目录下,则

codebase="."即可。

第三步:

保存网页,点击运行网页,可以看到屏幕输出了"Hello World!".



情景二:applet引入第三方的jar包,网页调用。

这种情况比较烦人,这也是我纠结两天没才弄出来的原因。

步骤基本如下:



第一步:

我写了一个applet。修改了init方法,重写了paint方法,代码如下。

public void paint(Graphics g)

{

Output outClass = new Output();

g.drawString("hahaha",20,20);

g.drawString(outClass.getString(),10,10);

}



public void init() {

setLayout(new FlowLayout());

add(new Button("预览"));

}



Output为我写的一个工具类类(它的主要作用是为了测试引入第三方jar包时,applet调用的问题),它会引入了一个第三方的jar包叫做“jna.jar”。代码如下:



import com.sun.jna.NativeLong;

public class Output {

public String getString()

{

NativeLong m_lUserID = new NativeLong(1);//用户登录句柄

return "You are in the Output Class" +m_lUserID.intValue();

}

}

第二步:写一个demo2.html

<body>

<applet codebase="."

code="DemoApplet.class"

name="DemoApplet"

archive="jna.jar"

width="320"

height="240">

</applet>

</body>



参数说明:其他参数都一样,只有添加了archive="jna.jar"这个参数是用来书写你引入的jar包的。如果有多个jar包,通过","分割。

【注】

1.第三方的jar包要和编译过的TestSimpleApplet.class在同一个目录下。

2.工具类(outclass)编译所产生的class文件(output.class 和引入的其他类的编译文件)也要放在codebase所表明的文件夹下。



第三步:

找到浏览器默认的jre,在其目录,举例为:*盘:\*\j2re1.4.2_05\lib\security\java.policy

在grant{}中添加如下一行代码:

permission java.security.AllPermission;

第四步:

点击运行网页,就出现了我们要的结果了。



可能出现错误:

1.红色的叉,提示class无法找到。这就要注意查看applet的code 和codebase是否写对,.class和.jar

文件的位置是否正确。

2.security之类的错误。这主要就是因为要调用用户本地的文件,但是由于jave的安全机制原因,不让applet访问用户本地文件,所以会发生异常。此时,就需要给applet赋予访问权限,从而避免错误。

3.网页中显示空白一块,或是灰色。那就是发生了异常,但是没有显示出来。

此时就要在IE的选项->高级->选择Java(Sun)将JRE***用于<applet>。从而当网页运行applet程序时就会显示Java控制台。显示相应的异常错误,仔细观察,相信可以找到错误的原因。



如有不解,请参阅http://topic.csdn.net/u/20100318/14/950bd343-6077-4e24-ad3c-9833149a4e30.html

当时在这个帖子中有关于此调用的讨论。

//---------【备忘】------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

<applet code = "test.view.AppletMain" archive="view/ResultTreeView.jar"

width = "90%" height = "90%" vspace = "0" hspace = "0">

</applet>

第三方archive的指定,可以不必通过在archive中逗号分隔指定,可以结合上一篇的“运行jar应用程序引用其它jar包的四种方法”直接在jar包里的manifest文件中指定。当然似乎在html页面中指定会更灵活,但是manifest中指定可以让你的jar既可以作为Applet也可以作为Application来运行。

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: