关于Html嵌入Applet的问题

<applet
    codebase   =   ". "
    code           =   "signedapplet.TestApplet.class "
    archive   =   "SignedApplet.jar "
    name           =   "TestApplet "
    width         =   "400 "
    height       =   "300 "
    hspace       =   "0 "
    vspace       =   "0 "
    align         =   "middle "
> "


只要在你的网页中加入codebase参数即可:
<applet   codebase= "a.class的绝对路径 "   code= "a.class "   width=200   height=200>
</applet>
那么你的网页在哪个目录都可以了。
祝你成功!


关于Html嵌入Applet的问题
标签的属性介绍
属性 含义
Width Applet在Html页面上的宽度
Height Applet在Html页面上的高度
Name Applet在Html页面上的名称,用于区名一个Html页面上的多个Applet
Code Applet类名,必须带后缀”class”当没有属性archive时,直接写类名当有属性archive时,必须带包名
Codebase Applet的类相对路径,相对于Html页面位置
Archive Applet所在Jar包的文件名
标签< PARAM>的属性介绍
属性 含义
Name Applet传入的参数名
Value Applet传入的参数值
当Applet 为一个Class类文件嵌入的写法
属性Code ==========Applet类名,必须带后缀名
属性CodeBase ---------------Class类文件相对于Html页面的相对路径
Applet为一个JAR包,嵌入Html的写法
属性Code ==========Applet类名,包括包名
属性CodeBase ----------------Applet JAR包相对于Html页面的相对路径
属性Archive -----------------------Applet Jar包文件名

public class AppletDll extends Applet {  
      
    public void init(){}  

    public String getName() {  
                  //访问本地资源  
        File file = new File("c://test.txt");  
        return String.valueOf(file.isFile());  
    }  

    public void paint(Graphics g) {}  

}

<script language="JavaScript">  
function changeUserName(){  
       alert(document.myApplet.getName());//JS调用applet方法  
       return false;  
}  

</script>  
<applet ID='myApplet' Name='myApplet' code='AppletDll.class' codeBase='.' archive='AppletTest.jar' width='200' height='200'></applet>  
<input type=Button name=Btn value="Change Name" language="JavaScript" οnclick="return changeUserName();">


jar包:实际就是一个zip压缩包

比如applet需要用到多个class,那么可以把这些class放到一个jar包里,一起发送过去。
相应地,applet的标签应该改成
<applet code = "CalculatorApplet.class" archive = "CalculatorClasses.jar" width="100" height="150">

应用程序打包:把类文件、资源文件打包。标准的jdk库位于rt.jar包中。
jar包里应该包含一个清单文件(manifest):MANIFEST.MF,位于META-INF子目录下。
可以通过eclipse的export功能可以进行简单打包,而fatjar插件功能更强大。
一般把src打包export=>Jar File 即可。
想把src附属的资源一起打包,必须使用FatJar。

能够运行的jar文件:必须在清单文件中指定主类---创建名为manclass.mf的文件,其中包含下面一行“Main-Class: com/mycompany/mypkg/MainAppClass”。
注意:最后一行必须以换行符结束。不要带扩展名".class"。

运行jar程序:java -jar MyProgram.jar,或者双击即可。(在windows下如果双击不能运行的话,应该将打开方式设为"javaw -jar", javaw和java命令一样,但是不需要打开命令行)

资源:程序中用到的其他文件,比如图片,配置文件等
利用Class类的getResource方法来获取资源文件:
URL url = AboutPanel.class.getResource("about.gif");
将会在AboutPanel.class文件的同一目录下(或者在压缩包里的同一个位置)查找about.gif文件,并返回该文件的url表示。
该方法的好处是可以直接定位jar包里的文件。
也可以直接作为一个InputStream打开:
InputStream stream = AboutPanel.class.getResourceAsStream("about.gif")
如果参数字符传串为空串,则得到该类的class文件。

相对路径和绝对路径:
"data/text/about.txt"表示相对目录,相对于该class文件所在的目录。
以"/"开头的资源名称为绝对资源名称,乃是相对于包的根目录。
注意:不论是在什么系统里,都要用"/"做为分隔符。

密封:可以把一个jar包里的类密封起来。比如,如果密封了com.mycompany.util包,那么就不能用下面的语句定义密封包外的类:package com.mycompany.util。
如果要密封一个jar包,应该在清单文件的主节中加入一行:"Sealed: true"。(节就是用空行分开的段落,第一个段落称为主节)。
如果密封个别的包,可以增加一节:
Name: com/mycompany/util/
Sealed: true

java web start程序:
既可以单独运行,又可以在浏览器中运行。但是和applet不同,运行方式类似于adobe acrobat在浏览器中的运行。需要用到JNLP文件。比较复杂,看不懂。

HTML文件为
<applet code="analyzer.c_analyzer.class" archive="analyzer.jar" width="100%" height="100%">  
</applet>
我的applet作成analyzer.jar包,入口是analyzer.c_analyzer.class,applet会引用第三方jfreechart包里的相关类。这在eclipse里运行正常,但是放在网页运行会出现如下错误,我不想将jfreechart包编译进applet中,太大了……,能不能在html文件里指定,具体该如何写?thanks!

java.lang.NoClassDefFoundError: org/jfree/chart/labels/CategoryItemLabelGenerator
at analyzer.c_analyzer.<init>(c_TSAnalyzer.java:54)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at java.lang.Class.newInstance0(Unknown Source)
at java.lang.Class.newInstance(Unknown Source)
at sun.applet.AppletPanel.createApplet(Unknown Source)
at sun.plugin.AppletViewer.createApplet(Unknown Source)
at sun.applet.AppletPanel.runLoader(Unknown Source)
at sun.applet.AppletPanel.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: org.jfree.chart.labels.CategoryItemLabelGenerator


<applet code="analyzer.c_analyzer.class" archive="analyzer.jar;jfreechart.jar" width="100%" height="100%">  
</applet>
analyzer.jar,jfreechart.jar放在同级目录。

1.不过如果你的jfreechart.jar太大,会导致用户在使用applet的时候从服务器下载jfreechart.jar时间过长.
2.提供两个解决方案,
a.你可以把涉及到jfreechart.jar包的相关功能放到服务器上,做成servlet,然后在applet里面使用java.net包下url类访问此servlet拿到http的response,然后解析获取你自己需要的东西。
b.把jfreechart.jar包的相关功能发布成一个webservice,在applet里面去调用这个webservice的方法.


昨天和今天主要纠结于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控制台。显示相应的异常错误,仔细观察,相信可以找到错误的原因。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值