Jfreechart applet problem

A discussion forum for JFreeChart (a 2D chart library for the Java platform).
Locked
sridhar_ratna
Posts: 3
Joined: Mon Jul 18, 2005 9:54 am
Contact:

Jfreechart applet problem

Post by sridhar_ratna » Wed Aug 16, 2006 10:00 am

Hi,

I got the following applet code from net. Its running fine within Applet viewer. But when I embedded in a html page and deployed in tomcat i am getting the the following error. I have copied the JFreechart and Jcommon libraries in lib directory of my project. I am using Jfreechart version 1.0

java.lang.NoClassDefFoundError: org/jfree/data/time/RegularTimePeriod
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Unknown Source)
at java.lang.Class.getConstructor0(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)


Applet code
============
/* ------------
* Applet1.java
* ------------
* (C) Copyright 2002-2005, by Object Refinery Limited.
*/

package demo;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JApplet;
import javax.swing.Timer;

import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYItemRenderer;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.time.Millisecond;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;

/**
* A simple applet demo.
*/
public class Applet1 extends JApplet {

/** Time series for total memory used. */
private TimeSeries total;

/** Time series for free memory. */
private TimeSeries free;

/**
* Creates a new instance.
*/
public Applet1() {

// create two series that automatically discard data more than
// 30 seconds old...
this.total = new TimeSeries("Total", Millisecond.class);
this.total.setHistoryCount(30000);
this.free = new TimeSeries("Free", Millisecond.class);
this.free.setHistoryCount(30000);
TimeSeriesCollection dataset = new TimeSeriesCollection();
dataset.addSeries(total);
dataset.addSeries(free);

DateAxis domain = new DateAxis("Time");
NumberAxis range = new NumberAxis("Memory");

XYItemRenderer renderer = new XYLineAndShapeRenderer(true, false);

XYPlot plot = new XYPlot(dataset, domain, range, renderer);
plot.setBackgroundPaint(Color.lightGray);
plot.setDomainGridlinePaint(Color.white);
plot.setRangeGridlinePaint(Color.white);
renderer.setSeriesPaint(0, Color.red);
renderer.setSeriesPaint(1, Color.green);
renderer.setSeriesStroke(0, new BasicStroke(1.5f));
renderer.setSeriesStroke(1, new BasicStroke(1.5f));

domain.setAutoRange(true);
domain.setLowerMargin(0.0);
domain.setUpperMargin(0.0);
domain.setTickLabelsVisible(true);

range.setStandardTickUnits(NumberAxis.createIntegerTickUnits());

JFreeChart chart = new JFreeChart(
"Memory Usage", JFreeChart.DEFAULT_TITLE_FONT, plot, true
);
chart.setBackgroundPaint(Color.white);
ChartPanel chartPanel = new ChartPanel(chart);
//chartPanel.setPopupMenu(null);

getContentPane().add(chartPanel);
new Applet1.DataGenerator().start();

}

/**
* Adds an observation to the 'total memory' time series.
*
* @param y the total memory used.
*/
private void addTotalObservation(double y) {
total.add(new Millisecond(), y);
}

/**
* Adds an observation to the 'free memory' time series.
*
* @param y the free memory.
*/
private void addFreeObservation(double y) {
free.add(new Millisecond(), y);
}

/**
* The data generator.
*/
class DataGenerator extends Timer implements ActionListener {

/**
* Constructor.
*/
DataGenerator() {
super(100, null);
addActionListener(this);
}

/**
* Adds a new free/total memory reading to the dataset.
*
* @param event the action event.
*/
public void actionPerformed(ActionEvent event) {
long f = Runtime.getRuntime().freeMemory();
long t = Runtime.getRuntime().totalMemory();
addTotalObservation(t);
addFreeObservation(f);
}

}

}


my html code is like this
=================

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>applet.html</title>

<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="this is my page">

<!--<link rel="stylesheet" type="text/css" href="./styles.css">-->

</head>

<body>
This is my HTML page. <br>
<APPLET code="demo.Applet1.class"></APPLET>
</body>
</html>

Please help me in solving this.

Thanks in advance,
Sridhar

pmlb
Posts: 31
Joined: Thu Aug 25, 2005 5:18 pm
Location: France

Post by pmlb » Wed Aug 16, 2006 11:29 am

Hi Sridhar,

The Applet is executed in the browser which is unaware of the Jxxx libraries. You have to use the ARCHIVE attribute of the APPLET tag to indicate the needed jar files:

Code: Select all

<APPLET code="demo.Applet1.class" ARCHIVE="comma separated list of jar files"></APPLET>
Hope it helps
Pierre-Marie

Locked