----------------------------------------
我是在一个jsp中,将远程数据库返回的记录值作为applet的参数在IE里绘制曲线的:
<APPLET CODE = "drawload.class" CODEBASE = "." WIDTH = 620 HEIGHT = 500> <PARAM NAME = CODEBASE VALUE  = "." >
<PARAM NAME = bk_CPU VALUE =<%=bk_CPU%>>
<PARAM NAME = bk_DISK VALUE =<%=bk_DISK%>>
<PARAM NAME = bk_MEM VALUE =<%=bk_MEM%>>alt="Your browser understands the &lt;APPLET&gt; tag but isn't running the applet, for some reason."
Your browser is completely ignoring the &lt;APPLET&gt; tag!</APPLET>----------------------------------------
首先把这个jsp文件用HtmlConvertor进行转换,注册引用的drawload.lass,关键段变成:<!--"CONVERTED_APPLET"-->
<!-- CONVERTER VERSION 1.3 -->
<OBJECT classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
WIDTH = 620 HEIGHT = 500  codebase="http://java.sun.com/products/plugin/1.3/jinstall-13-win32.cab#Version=1,3,0,0">
<PARAM NAME = CODE VALUE = "drawload.class" >
<PARAM NAME = CODEBASE VALUE = "." ><PARAM NAME="type" VALUE="application/x-java-applet;version=1.3">
<PARAM NAME="scriptable" VALUE="false">
<PARAM NAME = CODEBASE VALUE   = "." >
<PARAM NAME = bk_CPU VALUE  =<%=bk_CPU%>>
<PARAM NAME = bk_DISK VALUE  =<%=bk_DISK%>>
<PARAM NAME = bk_MEM VALUE  =<%=bk_MEM%>>
<COMMENT>
<EMBED type="application/x-java-applet;version=1.3"  CODE = "drawload.class" CODEBASE = "." WIDTH = 620 HEIGHT = 500 CODEBASE =  "." bk_CPU = <%=bk_CPU%> bk_DISK = <%=bk_DISK%> bk_MEM = <%=bk_MEM%>  scriptable=false pluginspage="http://java.sun.com/products/plugin/1.3/plugin-install.html"><NOEMBED></COMMENT>
alt="Your browser understands the &lt;APPLET&gt; tag but isn't running the applet, for some reason."
Your browser is completely ignoring the &lt;APPLET&gt; tag!
</NOEMBED></EMBED>
</OBJECT>
----------------------------------------
绘图drawload.java见下:
import java.util.*;
import java.lang.Double;
import java.lang.String;
import java.awt.*;
import java.awt.Graphics;
import java.awt.FontMetrics;
import java.applet.Applet;public class drawload extends java.applet.Applet {
    double[] series1 = new double[30];
    double[] series2 = new double[30];
    double[] series3 = new double[30];
    Dimension d; 
    int topx=0, topy=0,count=0;      ;
    
    public void init(){
     d = getSize();     
     String cpu_str = getParameter("parray1");
     String disk_str = getParameter("parray2");
     String mem_str = getParameter("parray3");
    
for (StringTokenizer t = new StringTokenizer(cpu_str, ",") ; t.hasMoreTokens() ; ) {     
    series1[count++] = Double.parseDouble(t.nextToken());     
    System.out.println(t.nextToken());
}
for (StringTokenizer t = new StringTokenizer(disk_str, ",") ; t.hasMoreTokens() ; ) {     
    series2[count++] = Double.parseDouble(t.nextToken());     
    System.out.println(t.nextToken());
}
        for (StringTokenizer t = new StringTokenizer(mem_str, ",") ; t.hasMoreTokens() ; ) {     
    series3[count++] = Double.parseDouble(t.nextToken());     
    System.out.println(t.nextToken());
}
 
    }
    
    public void paint(Graphics g) {    
    
     // 打底纹格
     FontMetrics lblfm = g.getFontMetrics();
     int x1=topx+30, y1=topy+20;
     g.setColor(Color.black);              
     g.fillRect(x1,y1-20,d.width,100);
        for (int i = 0 ; i < 30 ; i++) {
    g.setColor(Color.white);    
    g.drawLine(x1,topy, x1, topy+100);     
    
    g.setColor(new Color(150,134,173));
    g.drawString(Integer.toString(i), x1-lblfm.stringWidth(Integer.toString(i))/2, topy+105+lblfm.getHeight()/2);
    x1 +=20;
}

//标注
for (int i = 0 ; i < 5 ; i++) {    
    g.setColor(Color.white);    
    g.drawLine(topx+30,y1,610,y1);    
        g.setColor(new Color(150,134,173));
    g.drawString(Integer.toString((5-i)*20), topx+20-lblfm.stringWidth(Integer.toString((5-i)*20))/2, y1-lblfm.getHeight()/2);
    y1 +=20;
        } //画图             
        int x = topx+30;
        for (int j =0 ; j < count ; ) {
             g.setColor(Color.red);              
             g.drawLine(x,topy+100-(int)series1[j],x+=20,topy+100-(int)series1[++j]);
        }        topy+=150;
       // 打底纹格    
     int x2=topx+30, y2=topy+20;   
     g.setColor(Color.black);              
     g.fillRect(x2,y2-20,d.width,100);      
        for (int i = 0 ; i < 30 ; i++) {
    g.setColor(Color.white);    
    g.drawLine(x2,topy, x2, topy+100);     
    
    g.setColor(new Color(150,134,173));
    g.drawString(Integer.toString(i), x2-lblfm.stringWidth(Integer.toString(i))/2, topy+105+lblfm.getHeight()/2);
    x2 +=20;
}

//标注
for (int i = 0 ; i < 5 ; i++) {    
    g.setColor(Color.white);    
    g.drawLine(topx+30,y2,610,y2);    
        g.setColor(new Color(150,134,173));
    g.drawString(Integer.toString((5-i)*20), topx+20-lblfm.stringWidth(Integer.toString((5-i)*20))/2, y2-lblfm.getHeight()/2);
    y2 +=20;
        } //画图             
        int xx = topx+30;
        for (int j =0 ; j < count ; ) {
             g.setColor(Color.red);              
             g.drawLine(xx,topy+100-(int)series2[j],xx+=20,topy+100-(int)series2[++j]);
        }
    
     topy+=150;
     // 打底纹格    
     int x3=topx+30, y3=topy+20;         
     g.setColor(Color.black);              
     g.fillRect(x3,y3-20,d.width,100);
        for (int i = 0 ; i < 30 ; i++) {
    g.setColor(Color.white);    
    g.drawLine(x3,topy, x3, topy+100);     
    
    g.setColor(new Color(150,134,173));
    g.drawString(Integer.toString(i), x3-lblfm.stringWidth(Integer.toString(i))/2, topy+105+lblfm.getHeight()/2);
    x3 +=20;
}

//标注
for (int i = 0 ; i < 5 ; i++) {    
    g.setColor(Color.white);    
    g.drawLine(topx+30,y3,610,y3);    
        g.setColor(new Color(150,134,173));
    g.drawString(Integer.toString((5-i)*20), topx+20-lblfm.stringWidth(Integer.toString((5-i)*20))/2, y3-lblfm.getHeight()/2);
    y3 +=20;
        } //画图             
        int xxx = topx+30;        
        for (int j =0 ; j < count ; ) {
             g.setColor(Color.red);              
             g.drawLine(xxx,topy+100-(int)series3[j],xxx+=20,topy+100-(int)series3[++j]);
        }    }
}

解决方案 »

  1.   

    我是在一个jsp中,将远程数据库返回的记录值作为applet的参数在IE里绘制曲线的:
    现在这个绘图的applet,如果用一个静态参数的htm来引用,jdk的appletviewer看是有结果的,但是画面不稳定,一拖就完蛋;
    但是放到jsp里(实时连接数据库以得到动态参数值,用ie6显示时applet加载很久也没有曲线显示出来
      

  2.   

    用ie6显示时applet加载很久也没有曲线显示出来 
    看看java console window 有什么错误信息没有
    但是画面不稳定,一拖就完蛋;可以使用双缓冲方式绘图
    BufferedImage buf1;
    BufferedImage buf2;
    int flag;
    paint(...)
    {
    if(flag==1)
    //draw buf1 to screen
    if(flag==2)
    //draw buf2 to screen.
    }
    开一个工作线程负责更新buf1 /buf2,更新好后改变flag, 调用applet.repaint