Applet 绘图小程序未在Web浏览器上运行

Applet 绘图小程序未在Web浏览器上运行,applet,browser,Applet,Browser,我从JFreeCharts的DynamicMiseriesCollection display中获得了源代码 当我将它作为一个简单的java应用程序运行时,它工作得很好,但我希望它作为applet 因此,我编写了Applet代码,并将所有代码插入start()、paint()和init()函数中 当我执行“运行文件”时,它运行得很好,但是当我尝试在webbrowser(启用JavaSE6)上打开生成的HTML页面时,它会显示一个空白屏幕。我正在使用Netbeans 7.0 代码如下: impor

我从JFreeCharts的DynamicMiseriesCollection display中获得了源代码

当我将它作为一个简单的java应用程序运行时,它工作得很好,但我希望它作为applet

因此,我编写了Applet代码,并将所有代码插入start()、paint()和init()函数中

当我执行“运行文件”时,它运行得很好,但是当我尝试在webbrowser(启用JavaSE6)上打开生成的HTML页面时,它会显示一个空白屏幕。我正在使用Netbeans 7.0

代码如下:

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JApplet;
import javax.swing.JButton;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.plot.XYPlot;
import org.jfree.data.time.DynamicTimeSeriesCollection;
import org.jfree.data.time.Second;
import org.jfree.data.xy.XYDataset;
import javax.swing.JComboBox;
import javax.swing.JPanel;
import javax.swing.Timer;

public class GraphTest extends JApplet {

    private static final String TITLE = "ECG of the Patient";
    private static final String START = "Start";
    private static final String STOP = "Stop";
    private static final float MINMAX = 100;
    private static final int COUNT = 2 * 60;
    private static final int FAST = 100;
    private static final int SLOW = FAST * 5;
    private Timer timer;
    // private Object random;
    //private static final Random random = new Random();
    ReadAFile file_reader = new ReadAFile();
    byte[] values = file_reader.Readfile();
    float[] temp = new float[120];

    public GraphTest() {
        //super(title);
        final DynamicTimeSeriesCollection dataset =
                new DynamicTimeSeriesCollection(1, COUNT, new Second());
        dataset.setTimeBase(new Second(0, 0, 0, 1, 1, 2011));

        dataset.addSeries(temp, 0, "ECG Plot");
        JFreeChart chart = createChart(dataset);

        final JButton run = new JButton(STOP);
        run.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                String cmd = e.getActionCommand();
                if (STOP.equals(cmd)) {
                    timer.stop();
                    run.setText(START);
                } else {
                    timer.start();
                    run.setText(STOP);
                }
            }
        });

        final JComboBox combo = new JComboBox();
        combo.addItem("Fast");
        combo.addItem("Slow");
        combo.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                if ("Fast".equals(combo.getSelectedItem())) {
                    timer.setDelay(FAST);
                } else {
                    timer.setDelay(SLOW);
                }
            }
        });

        this.add(new ChartPanel(chart), BorderLayout.CENTER);
        JPanel btnPanel = new JPanel(new FlowLayout());
        btnPanel.add(run);
        btnPanel.add(combo);
        this.add(btnPanel, BorderLayout.SOUTH);


        timer = new Timer(FAST, new ActionListener() {

            float[] newData = new float[1];
            int i = 0;

            @Override
            public void actionPerformed(ActionEvent e) {
                newData[0] = values[i];
                dataset.advanceTime();
                dataset.appendData(newData);
                i++;

            }
        });
    }

    /**
     * Initialization method that will be called after the applet is loaded
     * into the browser.
     */
    @Override
    public void init() {
        EventQueue.invokeLater(new Runnable() {

            private String TITLE;
            //  this.setLayout(new FlowLayout());

            @Override
            public void run() {

                //DTSCTest demo = new DTSCTest(TITLE);
                // DTSCTest demo = new DTSCTest(TITLE);
                // pack();
                //RefineryUtilities.centerFrameOnScreen();
                //RefineryUtilities.centerFrameOnScreen(demo);
                setVisible(true);
                //demo.start();
            }
        });
        // TODO start asynchronous download of heavy resources
    }

    @Override
    public void paint(Graphics g) {
    }

    private JFreeChart createChart(final XYDataset dataset) {
        final JFreeChart result = ChartFactory.createTimeSeriesChart(
                TITLE, "hh:mm:ss", "Magnitude", dataset, true, true, false);
        final XYPlot plot = result.getXYPlot();
        ValueAxis domain = plot.getDomainAxis();
        domain.setAutoRange(true);
        ValueAxis range = plot.getRangeAxis();
        range.setRange(-MINMAX, MINMAX);
        return result;
    }

    @Override
    public void start() {
        timer.start();
    }
}
下面是这个类调用的另一个java文件

import java.io.*;

public class ReadAFile {

    float[] datavalues = new float[300];

    /**
     * @param args the command line arguments
     */
    public byte[] Readfile() {
        StringBuilder contents = new StringBuilder();
        try {
            // use buffering, reading one line at a time
            // FileReader always assumes default encoding is OK!
            BufferedReader input = new BufferedReader(new FileReader("Desktop/Mytest.txt"));

            try {
                String line = null; // not declared within while loop
                /*
                 * readLine is a bit quirky : it returns the content of a line
                 * MINUS the newline. it returns null only for the END of the
                 * stream. it returns an empty String if two newlines appear in
                 * a row.
                 */
                while ((line = input.readLine()) != null) {
                    contents.append(line);
                }
            } finally {
                input.close();
            }
        } catch (IOException ex) { System.out.println("Exception coming ");
        }
        byte[] finalarray = new byte[contents.length()];
        for (int ch = 0; ch < contents.length(); ++ch) {
            char co = contents.charAt(ch);
            int j = (int) co;
            finalarray[ch] = (byte) j;

        }
        return finalarray;
    }
}
import java.io.*;
公共类可读文件{
float[]数据值=新的float[300];
/**
*@param指定命令行参数
*/
公共字节[]读取文件(){
StringBuilder内容=新建StringBuilder();
试一试{
//使用缓冲,一次读取一行
//FileReader始终假定默认编码是正确的!
BufferedReader输入=新的BufferedReader(新的文件阅读器(“Desktop/Mytest.txt”);
试一试{
String line=null;//未在while循环中声明
/*
*readLine有点奇怪:它返回一行的内容
*减去换行符。它仅在
*如果在流中出现两个换行符,则返回空字符串
*一排。
*/
而((line=input.readLine())!=null){
内容。追加(行);
}
}最后{
input.close();
}
}catch(IOException ex){System.out.println(“异常来临”);
}
字节[]finalarray=新字节[contents.length()];
for(int ch=0;ch
这看起来像是我在重复我自己(如果你看我的其他答案),但是:永远不要覆盖Swing中的
paint()
方法

如果确实需要绘制某些内容,请重写
paintComponent()
。但在您的情况下,您只需将JFreeChart的一个组件放入applet中(您在构造函数中所做的),然后就可以完成


(为了完整:所有与GUI相关的工作都应该在AWT事件调度线程中完成,比如使用
EventQueue.invokeLater
(或SwingUtilities.invokeLater)。小程序的构造函数将不会在此线程中调用,这意味着您不应该在构造函数中进行GUI初始化。最好将其放在从init方法调用的
调用器中。)

要更快获得更好的帮助,请发布一个。