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