Non mi trova la main class....perché....non riesco a capire...
Questo è l'errore:
codice:
java.lang.NoClassDefFoundError: RealTimeChartProva
Caused by: java.lang.ClassNotFoundException: RealTimeChartProva
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
Exception in thread "main"
Ho rinominato la tua classe in RealTimeChartProva ma non me la fa partire, pur non trovando errori di alcun tipo:
codice:
import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.AdjustmentEvent;
import java.awt.event.AdjustmentListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.Frame;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
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;
import org.jfree.ui.RectangleInsets;
public class RealTimeChartProva extends JPanel{
/**Dati temporali da rappresentare*/
private TimeSeries variabile;
private int numVal = 0;
private JScrollPane scrollpane;
/**Metodo costruttore
*
* @param maxAge durata max visualizzazione dato
*/
public void setScrollPanel(JScrollPane scrollpane) {
this.scrollpane = scrollpane;
scrollpane.getHorizontalScrollBar().addAdjustmentListener(new AdjustmentListener() {
public void adjustmentValueChanged(AdjustmentEvent e) {
e.getAdjustable().setValue(e.getAdjustable().getMaximum());
}});
}
public RealTimeChartProva(int maxAge, String nomeVar, String grandezza){
super(new BorderLayout());
//Creazione serie dati che verranno rimpiazzati dopo maxAge
this.variabile=new TimeSeries(nomeVar,Millisecond.class);
//this.variabile.setMaximumItemAge(maxAge);
//Creazione dataset da analizzare
TimeSeriesCollection dataset=new TimeSeriesCollection();
dataset.addSeries(this.variabile);
//Costruzione grafico da realizzare(dominio e variabile misurata)
DateAxis dominio=new DateAxis("Tempo");
NumberAxis valori=new NumberAxis(grandezza);
dominio.setTickLabelFont(new Font("SansSerif", Font.PLAIN, 12));//scelta font scrittura
valori.setTickLabelFont(new Font("SansSerif", Font.PLAIN, 12));
XYItemRenderer renderer = new XYLineAndShapeRenderer(true, false);//linee visibili, punti no
renderer.setSeriesPaint(0, Color.blue);//colore della funzione
renderer.setStroke(new BasicStroke(1f, BasicStroke.CAP_BUTT,//Larghezza e finitura tratto
BasicStroke.JOIN_BEVEL));
XYPlot plot = new XYPlot(dataset, dominio, valori, renderer);//Disegno del grafico
//colori del grafico
plot.setBackgroundPaint(Color.lightGray);
plot.setDomainGridlinePaint(Color.white);
plot.setRangeGridlinePaint(Color.white);
plot.setAxisOffset(new RectangleInsets(5.0, 5.0, 5.0, 5.0));
dominio.setAutoRange(true);
dominio.setLowerMargin(0.0);
dominio.setUpperMargin(0.0);
dominio.setTickLabelsVisible(true);
valori.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
//grafico
JFreeChart chart = new JFreeChart(grandezza,
new Font("SansSerif", Font.BOLD, 24), plot, true);
chart.setBackgroundPaint(Color.white);
ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setBorder(BorderFactory.createCompoundBorder(
BorderFactory.createEmptyBorder(4, 4, 4, 4),
BorderFactory.createLineBorder(Color.black)));
add(chartPanel);
}
/**Metodo che aggiunge un campione all'osservazione in atto
*
* @param val valore della variabile esaminata
*/
private void aggiungiValore(float val){
this.variabile.add(new Millisecond(), val);
numVal++;
if (numVal > 5) {
//se più di 5 campioni, aumenta la larghezza di 10 pixel
this.setSize(new Dimension((int)this.getSize().getWidth()+10, (int)this.getSize().getHeight()));
this.setPreferredSize(new Dimension((int)this.getSize().getWidth(), (int)this.getSize().getHeight()));
}
}
/**Generatore di dati(crea eventi in determinati intervalli di tempo)
*
*/
class GeneratoreDati extends Timer implements ActionListener{
/**Costruttore
*
* @param intervallo cadenza arrivo dati, in millisecondi
*/
GeneratoreDati(int intervallo){
super(intervallo,null);
addActionListener(this);
}
/**Aggiunta di un nuovo campione alla misurazione
* @param event evento che viene invocato
*/
public void actionPerformed(ActionEvent event){
float val=(float)(Math.random()*10000);
aggiungiValore(val);
}
}
public static void main(String[] args){
JFrame frame=new JFrame("Rappresentazione");
RealTimeChartProva panel = new RealTimeChartProva(60000, "Grandezza", "Misura");
JScrollPane scroll = new JScrollPane();
panel.setScrollPanel(scroll);
scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
scroll.getViewport().add(panel);
frame.getContentPane().add(scroll, BorderLayout.CENTER);//posizionamento grafico
frame.setSize(700,500);
frame.setVisible(true);
panel.new GeneratoreDati(1000).start();//genera dati ogni secondo
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
Mi sembra una buona strada quella che hai suggerito, solo che non me la fa partire