我认为这可能是一个范围问题,但它一直困扰着我。每当我尝试将ReplayData添加到帧时,我都会收到空指针错误,也不能使用我的添加数据方法而不会抛出空指针错误。 p.Setx正在设置正确的值,但是一旦它命中“replaydata.add”,就会抛出错误并且循环无法继续。
public ReplayData replayData;
frame = new JFrame();
frame.setBounds(100, 100, 1920, 1080);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
// ERROR HERE WHEN ADDING TO FRAME, APPLICATION RUNS FINE IF COMMENTED
//frame.add(replayData); // Add replay data to jframe
JButton button_KMeans = new JButton("View K-Means");
button_KMeans.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
kMeans.initialize();
kMeans.kMeanCluster();
kMeans.PrintResults();
//for (Point p : kMeans.getPoints() )
Point temp = new Point();
for (int i = 0; i < kMeans.TOTAL_DATA; i++)
{
//JOptionPane.showMessageDialog(new JFrame(),kMeans.TOTAL_DATA, "Dialog",
// JOptionPane.ERROR_MESSAGE);;
p.setX((int)TrackerData.getRecordNumber(i).getEyeX());
p.setY((int)TrackerData.getRecordNumber(i).getEyeY());
JOptionPane.showMessageDialog(new JFrame(),p.getX(), "Dialog",
JOptionPane.ERROR_MESSAGE);
JOptionPane.showMessageDialog(new JFrame(),p.getY(), "Dialog",
JOptionPane.ERROR_MESSAGE);
// GET ERROR HERE when adding these points to replayData. everything look fine in that class unless i'm missing something
// java.lang.NullPointerException at MainWindow$3.actionPerformed(MainWindow.java:189)
replayData.addPoint(p); // Add points to JPanel
}
//replayData.draw();
}
});
这是我的按钮类,每当我尝试使用我的replaydata类
添加数据时都会出错继承其他2个ReplayData + DataPoint类
import java.awt.Graphics;
import java.awt.Point;
import java.util.ArrayList;
import javax.swing.JPanel;
public class ReplayData extends JPanel {
public ArrayList<DataPoint> points;
// Initialise records
public ReplayData()
{
points = new ArrayList<DataPoint>();
}
public void ReplaceData() {
points = new ArrayList<DataPoint>();
}
public void addPoint(DataPoint point) {
points.add(point);
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
for (DataPoint p : points)
g.fillRect(p.x, p.y, 2, 2);
}
public void draw() {
repaint();
}
}
public class DataPoint {
public DataPoint(int X, int Y)
{
x = X;
y = Y;
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
int x,y;
}
非常感谢任何帮助。
我的项目的副本,如果有人想在eclipse上打开它(我已经包含了.csv你需要让它在拉链上工作):http://www.filedropper.com/eyetrackeranalysis_1
答案 0 :(得分:2)
您声明变量:
public ReplayData replayData;
但永远不会初始化它。您的上述行等同于:
public ReplayData replayData = null;
您需要为变量分配一个对象,使其为非null。
public ReplayData replayData = new ReplayData();
更重要的是,您需要学习如何调试NPE(NullPointerException)的一般概念。 你应该批判性地阅读你的异常堆栈跟踪以找到错误的代码行,抛出异常的行,然后仔细检查该行,找出哪个变量为null,然后追溯到你的代码,看看为什么。你会一次又一次地碰到这些,相信我。