访问jsp页面时报了applet的异常
Java Plug-in 1.6.0_17
使用 JRE 版本 1.6.0_17-b04 Java HotSpot(TM) Client VM
用户主目录 = C:\Users\Administrator
----------------------------------------------------
c:   清除控制台窗口
f:   终结在结束队列上的对象
g:   垃圾收集
h:   显示此帮助消息
l:   转储类载入程序列表
m:   打印内存使用
o:   触发日志记录
q:   隐藏控制台
r:   重新载入策略配置
s:   转储系统和部署属性
t:   转储线程列表
v:   转储线程堆栈
x:   清除类载入程序高速缓存
0-5: 设置跟踪级别为<n>
----------------------------------------------------
java.lang.NullPointerException
at sun.plugin2.applet.Plugin2Manager.findAppletJDKLevel(Unknown Source)
at sun.plugin2.applet.Plugin2Manager.createApplet(Unknown Source)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
异常:java.lang.NullPointerExceptionjsp代码
<CENTER>           <jsp:plugin type="applet" code="CrosshairDemo.class" 
    codebase="."    width="500" height="400" archive="jfreechart-1.0.13-swt.jar,jcommon-1.0.0.jar,jfreechart-1.0.0.jar"> 
  
    <jsp:fallback> 
        <p>无法载入 Applet </p> 
    </jsp:fallback> 
</jsp:plugin> 
</CENTER> 
其中 class文件,jsp,2个jar包都放在了webroot根目录下,而且jar包也添加进了classpath内,我对applet很不熟悉不知道为什么还会报这个异常,求助各位高手

解决方案 »

  1.   

    java类:import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Container;
    import java.awt.Dimension;
    import java.io.PrintWriter;
    import java.text.SimpleDateFormat;
    import java.util.Date;import javax.faces.model.DataModel;
    import javax.servlet.http.HttpSession;
    import javax.swing.BorderFactory;
    import javax.swing.JApplet;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.border.Border;
    import javax.swing.table.AbstractTableModel;
    import javax.swing.table.TableCellRenderer;
    import javax.swing.table.TableModel;import org.jfree.chart.ChartFactory;
    import org.jfree.chart.ChartPanel;
    import org.jfree.chart.JFreeChart;
    import org.jfree.chart.axis.NumberAxis;
    import org.jfree.chart.event.ChartChangeEvent;
    import org.jfree.chart.event.ChartChangeListener;
    import org.jfree.chart.event.ChartProgressEvent;
    import org.jfree.chart.event.ChartProgressListener;
    import org.jfree.chart.plot.PlotOrientation;
    import org.jfree.chart.plot.XYPlot;
    import org.jfree.chart.renderer.xy.XYItemRenderer;
    import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
    import org.jfree.chart.servlet.ServletUtilities;
    import org.jfree.data.time.Minute;
    import org.jfree.data.time.RegularTimePeriod;
    import org.jfree.data.time.TimeSeries;
    import org.jfree.data.time.TimeSeriesCollection;
    import org.jfree.data.time.TimeSeriesDataItem;
    import org.jfree.data.xy.XYDataset;
    import org.jfree.ui.DateCellRenderer;
    import org.jfree.ui.NumberCellRenderer;
    import org.jfree.ui.RectangleInsets;/**
     * An example of....
     */
    public class CrosshairDemo extends JApplet {
    public CrosshairDemo() {
    DemoPanel d = new DemoPanel();

    //getContentPane().add(d.chartPanel);
    Container cp = getContentPane();
       
        cp.add(d.content);
       // cp.add(d.chartPanel);
        
       // cp.add(BorderLayout.SOUTH, txt);
    } public static class DemoPanel extends JPanel implements
    ChartChangeListener, ChartProgressListener { private static final int SERIES_COUNT = 4; private TimeSeriesCollection[] datasets; private TimeSeries[] series; private ChartPanel chartPanel; private DemoTableModel model;
    private JTable table;
    private JPanel dashboard;
    private JPanel content;
    /**
     * Creates a new demo panel.
     */
    public DemoPanel() {
    super(new BorderLayout());
    this.datasets = new TimeSeriesCollection[SERIES_COUNT];
    this.series = new TimeSeries[SERIES_COUNT];  content = new JPanel(new BorderLayout()); JFreeChart chart = createChart();
    this.chartPanel = new ChartPanel(chart);
    this.chartPanel.setPreferredSize(new java.awt.Dimension(600, 270));
    this.chartPanel.setDomainZoomable(true);
    this.chartPanel.setRangeZoomable(true);
    Border border = BorderFactory.createCompoundBorder(BorderFactory
    .createEmptyBorder(4, 4, 4, 4), BorderFactory
    .createEtchedBorder());
    this.chartPanel.setBorder(border);
    content.add(this.chartPanel);

     dashboard = new JPanel(new BorderLayout());
    dashboard.setPreferredSize(new Dimension(400, 120));
    dashboard.setBorder(BorderFactory.createEmptyBorder(0, 4, 4, 4)); this.model = new DemoTableModel(SERIES_COUNT);
    for (int row = 0; row < SERIES_COUNT; row++) {
    this.model.setValueAt(chart.getXYPlot().getDataset(row)
    .getSeriesKey(0), row, 0);
    this.model.setValueAt(new Double("0.00"), row, 1);
    this.model.setValueAt(new Double("0.00"), row, 2);
    this.model.setValueAt(new Double("0.00"), row, 3);
    this.model.setValueAt(new Double("0.00"), row, 4);
    this.model.setValueAt(new Double("0.00"), row, 5);
    this.model.setValueAt(new Double("0.00"), row, 6); }
     this.table = new JTable(this.model);
    TableCellRenderer renderer1 = new DateCellRenderer(
    new SimpleDateFormat("HH:mm:ss"));
    TableCellRenderer renderer2 = new NumberCellRenderer();
    table.getColumnModel().getColumn(1).setCellRenderer(renderer1);
    table.getColumnModel().getColumn(2).setCellRenderer(renderer2);
    table.getColumnModel().getColumn(3).setCellRenderer(renderer1);
    table.getColumnModel().getColumn(4).setCellRenderer(renderer2);
    table.getColumnModel().getColumn(5).setCellRenderer(renderer1);
    table.getColumnModel().getColumn(6).setCellRenderer(renderer2);
    dashboard.add(new JScrollPane(table));
    content.add(dashboard, BorderLayout.SOUTH);
    add(content); } /**
     * Creates a sample dataset.
     * 
     * @param indexthe
     *            dataset index.
     * @param namethe
     *            dataset name.
     * @param basethe
     *            starting value.
     * @param startthe
     *            starting period.
     * @param countthe
     *            number of values to generate.
     * 
     * @return The dataset.
     */
    private XYDataset createDataset(int index, String name, double base,
    RegularTimePeriod start, int count) { this.series[index] = new TimeSeries(name, start.getClass());
    RegularTimePeriod period = start;
    double value = base;
    for (int i = 0; i < count; i++) {
    this.series[index].add(period, value);
    period = period.next();
    value = value * (1 + (Math.random() - 0.495) / 10.0);
    } this.datasets[index] = new TimeSeriesCollection();
    this.datasets[index].addSeries(this.series[index]); return this.datasets[index]; } /**
     * Receives notification of a {@link ChartChangeEvent}.
     * 
     * @param eventthe
     *            event.
     */
    public void chartChanged(ChartChangeEvent event) {
    if (this.chartPanel != null) {
    JFreeChart chart = this.chartPanel.getChart();
    if (chart != null) {
    XYPlot plot = chart.getXYPlot();
    XYDataset dataset = plot.getDataset();
    Comparable seriesKey = dataset.getSeriesKey(0);
    double xx = plot.getDomainCrosshairValue();
    this.model.setValueAt(seriesKey, 0, 0);
    long millis = (long) xx;
    for (int row = 0; row < SERIES_COUNT; row++) {
    this.model.setValueAt(new Long(millis), row, 1);
    int[] bounds = this.datasets[row].getSurroundingItems(
    0, millis);
    long prevX = 0;
    long nextX = 0;
    double prevY = 0.0;
    double nextY = 0.0;
    if (bounds[0] >= 0) {
    TimeSeriesDataItem prevItem = this.series[row]
    .getDataItem(bounds[0]);
    prevX = prevItem.getPeriod().getMiddleMillisecond();
    Number y = prevItem.getValue();
    if (y != null) {
    prevY = y.doubleValue();
    this.model
    .setValueAt(new Double(prevY), row, 4);
    } else {
    this.model.setValueAt(null, row, 4);
    }
    this.model.setValueAt(new Long(prevX), row, 3);
    } else {
    this.model.setValueAt(new Double(0.00), row, 4);
    this.model.setValueAt(new Double(this.chartPanel
    .getChart().getXYPlot().getDomainAxis()
    .getRange().getLowerBound()), row, 3);
    }
    if (bounds[1] >= 0) {
    TimeSeriesDataItem nextItem = this.series[row]
    .getDataItem(bounds[1]);
    nextX = nextItem.getPeriod().getMiddleMillisecond();
    Number y = nextItem.getValue();
    if (y != null) {
    nextY = y.doubleValue();
    this.model
    .setValueAt(new Double(nextY), row, 6);
    } else {
    this.model.setValueAt(null, row, 6);
    }
    this.model.setValueAt(new Long(nextX), row, 5);
    } else {
    this.model.setValueAt(new Double(0.00), row, 6);
    this.model.setValueAt(new Double(this.chartPanel
    .getChart().getXYPlot().getDomainAxis()
    .getRange().getUpperBound()), row, 5);
    }
    double interpolatedY = 0.0;
    if ((nextX - prevX) > 0) {
    interpolatedY = prevY
    + (((double) millis - (double) prevX) / ((double) nextX - (double) prevX))
    * (nextY - prevY);
    } else {
    interpolatedY = prevY;
    }
    this.model
    .setValueAt(new Double(interpolatedY), row, 2);
    }
    }
    }
    }
      

  2.   

    接上部分:
    public JFreeChart createChart() { JFreeChart chart = ChartFactory.createTimeSeriesChart(
    "Crosshair Demo 2", "日期", "值", null, true,
    true, false); XYDataset[] datasets = new XYDataset[SERIES_COUNT];
    for (int i = 0; i < SERIES_COUNT; i++) {
    datasets[i] = createDataset(i, "Series " + i,
    100.0 + i * 200.0, new Minute(), 200);
    if (i == 0) {
    chart.getXYPlot().setDataset(datasets[i]);
    } else {
    XYPlot plot = chart.getXYPlot();
    plot.setDataset(i, datasets[i]);
    plot.setRangeAxis(i, new NumberAxis("Axis " + (i + 1)));
    plot.mapDatasetToRangeAxis(i, i);
    plot
    .setRenderer(i, new XYLineAndShapeRenderer(true,
    false));
    }
    }
    chart.addChangeListener(this);
    chart.addProgressListener(this);
    chart.setBackgroundPaint(Color.white);
    XYPlot plot = chart.getXYPlot();
    plot.setOrientation(PlotOrientation.VERTICAL);
    plot.setBackgroundPaint(Color.lightGray);
    plot.setDomainGridlinePaint(Color.white);
    plot.setRangeGridlinePaint(Color.white);
    plot.setAxisOffset(new RectangleInsets(5.0, 5.0, 5.0, 5.0)); plot.setDomainCrosshairVisible(true);
    plot.setDomainCrosshairLockedOnData(false);
    plot.setRangeCrosshairVisible(false); XYItemRenderer renderer = plot.getRenderer();
    renderer.setPaint(Color.black); return chart;
    }
    public void chartProgress(ChartProgressEvent event) {
    if (event.getType() != ChartProgressEvent.DRAWING_FINISHED) {
    return;
    }
    if (this.chartPanel != null) {
    JFreeChart c = this.chartPanel.getChart();
    if (c != null) {
    XYPlot plot = c.getXYPlot();
    XYDataset dataset = plot.getDataset();
    Comparable seriesKey = dataset.getSeriesKey(0);
    double xx = plot.getDomainCrosshairValue(); // update the table...
    this.model.setValueAt(seriesKey, 0, 0);
    long millis = (long) xx;
    this.model.setValueAt(new Long(millis), 0, 1);
    for (int i = 0; i < SERIES_COUNT; i++) {
    int itemIndex = this.series[i].getIndex(new Minute(
    new Date(millis)));
    if (itemIndex >= 0) {
    TimeSeriesDataItem item = this.series[i]
    .getDataItem(Math.min(199, Math.max(0,
    itemIndex)));
    TimeSeriesDataItem prevItem = this.series[i]
    .getDataItem(Math.max(0, itemIndex - 1));
    TimeSeriesDataItem nextItem = this.series[i]
    .getDataItem(Math.min(199, itemIndex + 1));
    long x = item.getPeriod().getMiddleMillisecond();
    double y = item.getValue().doubleValue();
    long prevX = prevItem.getPeriod()
    .getMiddleMillisecond();
    double prevY = prevItem.getValue().doubleValue();
    long nextX = nextItem.getPeriod()
    .getMiddleMillisecond();
    double nextY = nextItem.getValue().doubleValue();
    this.model.setValueAt(new Long(x), i, 1);
    this.model.setValueAt(new Double(y), i, 2);
    this.model.setValueAt(new Long(prevX), i, 3);
    this.model.setValueAt(new Double(prevY), i, 4);
    this.model.setValueAt(new Long(nextX), i, 5);
    this.model.setValueAt(new Double(nextY), i, 6);
    }
    } }
    }
    } } static JPanel createDemoPanel() {
    return new DemoPanel();
    }
     
    static class DemoTableModel extends AbstractTableModel implements
    TableModel { private Object[][] data;
    public DemoTableModel(int rows) {
    this.data = new Object[rows][7];
    }
    public int getColumnCount() {
    return 7;
    }
    public int getRowCount() {
    return this.data.length;
    }
    public Object getValueAt(int row, int column) {
    return this.data[row][column];
    }
    public void setValueAt(Object value, int row, int column) {
    this.data[row][column] = value;
    fireTableDataChanged();
    }
    public String getColumnName(int column) {
    switch (column) {
    case 0:
    return "曲线名称:";
    case 1:
    return "日期:";
    case 2:
    return "值:";
    case 3:
    return "X (prev)";
    case 4:
    return "Y (prev):";
    case 5:
    return "X (next):";
    case 6:
    return "Y (next):";
    }
    return null;
    } }
    public  String generateChart(HttpSession session,PrintWriter pw){ 
          String filename=null; 
          try{ 
           DemoPanel p = new DemoPanel();          JFreeChart chart=p.createChart();
             chart.setBackgroundPaint(java.awt.Color.white); 
             //设置图形的背景色 
             filename=ServletUtilities.saveChartAsPNG(chart,800,600,session); 
             pw.flush(); 
          }catch(Exception e){ 
             e.printStackTrace(); 
          } 
          return filename; 
       }
    }