2011-07-24 16 views
0

DynamicTimeSeriesCollectionのJFreeChartsからソースコードを取得しました。Webブラウザでアプレットが実行されていません

単純なJavaアプリケーションとして実行するとうまく動作しますが、それをアプレットとして使いたいと思っています。

私はAppletコードを作成し、start()、paint()、およびinit()関数にすべてのコードを挿入しました。

「ファイルを実行」するとうまく動作しますが、Webブラウザ(Java SE 6対応)で生成された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(); 
    } 
} 
ここ

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; 
    } 
} 
+0

[SSCCE](http://pscode.org/sscce.html)をすぐに投稿してください。 –

答えて

0

、このクラスによって呼び出され、別のjavaファイルは、あなたが他の回答を見ればそれは私が(自分自身を繰り返すことのように見えるかもしれであります私は)Swing!のpaint()メソッドを上書きしないでください。

実際に何かをペイントする必要がある場合は、paintComponent()をオーバーライドします。しかし、あなたの場合は、JFreeChartのコンポーネントの1つをアプレットの中に入れて(コンストラクタで行ったこと)、完了させる必要があります。

(すべてのGUI関連の項目は、EventQueue.invokeLater(またはSwingUtilities.invokeLater)のように、AWTイベントディスパッチスレッドで行う必要があります。このスレッドではアプレットのコンストラクタは呼び出されません。

関連する問題