以下のプログラムは、テキスト ファイルから整数の入力を取得し、XY グラフをプロットするために使用されます。私は JFileChooser を使用してファイルを選択しました。ファイルの完全なパスを取得しようとしています。ボタンの ActionListener メソッドを作成しました。実行すると、次のメッセージが表示されます。
Exception in thread "main" java.lang.NullPointerException
at java.io.File.<init>(Unknown Source)
at pia.main(pia.java:34)
import java.awt.event.ActionEvent;
import java.awt.event.*;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JPanel;
import org.jfree.chart.*;
import org.jfree.chart.plot.*;
import org.jfree.data.xy.*;
public class Pio {
public static void main(String[] args) throws IOException {
JButton but = new JButton("Open file");
String URL = null;
but.addActionListener(new ActionListerner()
{
public void actionPerformed(ActionEvent e) {
JFileChooser chooser = new JFileChooser();
int ret = chooser.showDialog(null, "Open file");
if (ret == JFileChooser.APPROVE_OPTION) {
File file = chooser.getSelectedFile();
String URL = file.getPath();
}
});
File f = new File(URL);
FileReader inputF = new FileReader(f);
BufferedReader in = new BufferedReader(inputF);
int[] a = new int[100];
int[] b = new int[100];
String s = in.readLine();
int i = 0;
while (s != null && i < 100) { // your arrays can only hold 1000 ints
String pair[] = s.split(" ");
a[i] = Integer.parseInt(pair[0]);
b[i] = Integer.parseInt(pair[1]);
i++; // don't forget to increment
s = in.readLine();
}
in.close();
System.out.println("the output of the file is " + f);
XYSeries data = new XYSeries("Line Graph");
int n = a.length;
for (int j = 0; j < n; j++) {
data.add(a[j], b[j]);
}
XYDataset xY = new XYSeriesCollection(data);
JFreeChart chart = ChartFactory.createXYLineChart("line graph", "Cycles", "Temperature", xY, PlotOrientation.VERTICAL, true, true, true);
ChartFrame frame = new ChartFrame("Example", chart);
JPanel panel = new JPanel();
panel.add(but);
frame.add(panel);
frame.setSize(1000, 500);
frame.setVisible(true);
}
}