最近在做一个web项目,用jfreechart生成图形报表,但图片形式不如窗体形式交互性强,于是考虑用applet嵌入到网页中。在myeclipse里运行正常,但在浏览器上就显示ClassNotFoundException异常。以下是我的解决办法。
首先用myeclipse创建一个web工程,命名为“myApplet”,创建包为com.test.applet如下图:
导入Jfreechart包jfreechart-1.0.14.jar和jcommon-1.0.17.jar。右键点击工程名,新建applet。
AppletTest.java根据applet模板自动生成了一些代码,找到
public void init() {
// Put your code here
}
贴入以下示例代码:
1 public void init() {
2 DefaultCategoryDataset dataset = new DefaultCategoryDataset();
3 dataset.addValue(1.0, "Row 1", "Column 1");
4 dataset.addValue(5.0, "Row 1", "Column 2");
5 dataset.addValue(3.0, "Row 1", "Column 3");
6 dataset.addValue(2.0, "Row 2", "Column 1");
7 dataset.addValue(3.0, "Row 2", "Column 2");
8 dataset.addValue(2.0, "Row 2", "Column 3");
9 JFreeChart chart = ChartFactory.createBarChart(
10 "Bar Chart Demo", // chart title
11 "Category", // domain axis label
12 "Value", // range axis label
13 dataset, // data
14 PlotOrientation.VERTICAL, // orientation
15 true, // include legend
16 true, // tooltips?
17 false // URLs?
18 );
19 ChartPanel chartPanel = new ChartPanel(chart);
20 chartPanel.setPreferredSize(new Dimension(500, 270));
21 Container content = getContentPane();
22 content.add(chartPanel);
23 }
这时候第21行getContentPane()会报错,将import java.applet.Applet;改为import javax.swing.JApplet;
类继承自Applet改为继承自JApplet,就不会报错了。
右键Run As-Java Applet执行,可以看到报表图形,显示正常,如下图:
在webroot下新建文件夹applet/com/test/applet/ 编译后,将tomcat下的\webapps\myApplet\applet\com\test\applet AppletTest.class文件复制到webroot建立的子目录下,如下图:
修改HTML文件StartPageForAppletTest.html
为以下内容
<applet codebase="/myApplet/applet/"
code="com.test.applet.AppletTest.class"
archive="jfreechart-1.0.14.jar,jcommon-1.0.17.jar"
name="AppletTest"
width="320"
height="240">
<!--<param name="p0" value="">
<param name="p1" value="">-->
</applet>
注意codebase所对应的目录和code所对应的包,archive表示要导入的包,将jfreechart-1.0.14.jar,jcommon-1.0.17.jar 再复制到webroot目录下,整个工程结构如下图:
运行tomcat,地址栏输入:
http://localhost:8080/myApplet/StartPageForAppletTest.html
就可以看到结果,如下图:
如果觉得在webroot下新建文件夹applet/com/test/applet/ 很麻烦,你也可以在src里将做好的applet的java文件打成jar包放入webroot下,相应的修改codebase和archive就可以了。如果有更好的办法,请大家共享。