NullPointerException. Как корректно разделить код на отдельные файлы?
Есть код, который находится в одном Java файле. Если вкратце эта программа с JTable в которую, вводят точки, а она по этим точкам рисует наиболее похожий график.
package TextEditor.graphicsModul;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableRowSorter;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.*;
import javafx.embed.swing.JFXPanel;
import java.util.*;
public class GUI extends JPanel {
private JPanel graphicsPanel;
private GraphicsArea graphicsArea;
private JButton runBut;
private JPanel leftPanel;
private JToolBar toolBar;
private DefaultTableModel dataTableModel;
private JTable dataTable;
private Double valueOfX, valueOfY;
private ArrayList<Ellipse2D.Double> pointList = new ArrayList<>();
public void addDataInTable(){
DefaultTableModel model = (DefaultTableModel)dataTable.getModel();
model.addRow(new Vector<>());
}
public void deleteDataFromTableRow (){
DefaultTableModel model = (DefaultTableModel)dataTable.getModel();;
model.removeRow(dataTable.getRowCount()-1);
}
public void clearDataTable(){
DefaultTableModel model = (DefaultTableModel)dataTable.getModel();
model.setRowCount(0);
}
public ArrayList<Ellipse2D.Double> getPointList(){
return pointList;
}
private abstract class calculationAbstract {
protected double deltaX = getMaxX0() - getMinX0();
protected double deltaY = getMaxY0() - getMinY0();
public abstract double getNewX();
public abstract double getNewY();
public abstract double getTransformedA();
public abstract double getTransformedB();
public abstract ArrayList<Double> getApproximationY();
public Ellipse2D.Double CurrentPoint;
public ArrayList<Double> calculateCommonPart() {
ArrayList<Ellipse2D.Double> transformedData = new ArrayList<>();
ArrayList<Double> result = new ArrayList<>();
for (int i = 0; i < pointList.size(); i++) {
transformedData.add(pointList.get(i));
}
// считаем коэффициенты a и b
double averageProductXY = 0;
double averageX = 0;
double averageY = 0;
double averageSqrX = 0;
int n = pointList.size();
double newX = 0;
double newY = 0;
for (int i = 0; i < n; i++) {
CurrentPoint = pointList.get(i);
newX = getNewX();
newY = getNewY();
averageX += newX;
averageY += newY;
averageSqrX += Math.pow(newX, 2);
averageProductXY += newX * newY;
}
averageProductXY /= n;
averageX /= n;
averageY /= n;
averageSqrX /= n;
double sqrDispX = 0d;
sqrDispX = averageSqrX - Math.pow(averageX, 2);
double a = (averageSqrX * averageY - averageX * averageProductXY) / sqrDispX;
double b = 0d;
b = (averageProductXY - averageX * averageY) / (sqrDispX);
result.add(a);
result.add(b);
return result;
}
public double factorial(double n) {
double tmp1 = Math.sqrt(2 * Math.PI * n);
double tmp2 = Math.pow(n / Math.E, n);
double tmp3 = Math.exp(1.0 / (12 * n - 1.0 / (20 * n)));//(Math.sqrt(52*Math.E)*n);
return tmp1 * tmp2 * tmp3;
}
public double sinMaclaren(double x) {
double sinmac = 0;
double xRad = Math.toRadians(x);
for (int i = 1; i < 50; i++) {
double a = 2 * i - 1;
double tmp1 = Math.pow((-1.0d), (i + 1));
double tmp2 = Math.pow(xRad, a);
double tmp3 = factorial(a);
sinmac += tmp1 * (tmp2 / tmp3);
}
return sinmac;
}
public double getSKO() {
double SKO = 0;
for (int i = 0; i < pointList.size(); i++) {
CurrentPoint = pointList.get(i);
double newX = getNewX();
double newY = getNewY();
SKO += Math.pow((newX * calculateCommonPart().get(1) + calculateCommonPart().get(0) - newY), 2);
}
return SKO;
}
public abstract String getFormula();
public double getMaxX0() {
double maxX0 = pointList.get(0).getX();
for (int i = 1; i < pointList.size(); i++) {
if (pointList.get(i).getX() > maxX0) {
maxX0 = pointList.get(i).getX();
}
}
return maxX0;
}
public double getMinX0() {
double minX0 = pointList.get(0).getX();
for (int i = 1; i < pointList.size(); i++) {
if (pointList.get(i).getX() < minX0) {
minX0 = pointList.get(i).getX();
}
}
return minX0;
}
public double getMinY0() {
double minY0 = pointList.get(0).getY();
for (int i = 1; i < pointList.size(); i++) {
if (pointList.get(i).getY() < minY0) {
minY0 = pointList.get(i).getY();
}
}
return minY0;
}
public double getMaxY0() {
double maxY0 = pointList.get(0).getY();
for (int i = 1; i < pointList.size(); i++) {
if (pointList.get(i).getY() > maxY0) {
maxY0 = pointList.get(i).getY();
}
}
return maxY0;
}
}
private class straighCalculate extends calculationAbstract{
// y = b*x+a
public double getNewX(){
return CurrentPoint.getX();
}
public double getNewY(){
return CurrentPoint.getY();
}
public double getTransformedA(){
return this.calculateCommonPart().get(0);
}
public double getTransformedB(){
return this.calculateCommonPart().get(1);
}
public ArrayList<Double> getApproximationY(){
ArrayList <Double> YList = new ArrayList<>();
for (double i = getMinX0(); i<getMaxX0(); i+=deltaX*0.01){
//double Y = getTransformedB()* pointList.get(i).getX() + getTransformedA();
double Y = getTransformedB()* i + getTransformedA();
YList.add(Y);
}
return YList;
}
public String getFormula (){
return "Y = " + getTransformedB() + "* x + " + getTransformedA();
}
}
private class exponentialCalculate extends calculationAbstract{
// y = a*x^b
public double getNewX(){
return Math.log(CurrentPoint.getX());
}
public double getNewY(){
return Math.log(CurrentPoint.getY());
}
public double getTransformedA(){
return Math.exp(this.calculateCommonPart().get(0));
}
public double getTransformedB(){
return this.calculateCommonPart().get(1);
}
public ArrayList<Double> getApproximationY(){
ArrayList <Double> YList = new ArrayList<>();
for (double i = getMinX0(); i<getMaxX0(); i+=deltaX*0.01){
//double Y = getTransformedA()* Math.pow(pointList.get(i).getX(), getTransformedB());
double Y = getTransformedA()* Math.pow(i, getTransformedB());
YList.add(Y);
}
return YList;
}
public String getFormula (){
return "Y = " + getTransformedA() + "* x ^ " + getTransformedB();
}
}
private class logCalculate extends calculationAbstract{
// y = b*ln(x)+a
public double getNewX(){
return Math.log(CurrentPoint.getX());
}
public double getNewY(){
return CurrentPoint.getY();
}
public double getTransformedA(){
return this.calculateCommonPart().get(0);
}
public double getTransformedB(){
return this.calculateCommonPart().get(1);
}
public ArrayList <Double> getApproximationY(){
ArrayList <Double> YList = new ArrayList<>();
for (double i = getMinX0(); i<getMaxX0(); i+=deltaX*0.01){
//double Y = getTransformedB()* Math.log(pointList.get(i).getX()) + getTransformedA();
double Y = getTransformedB()* Math.log(i) + getTransformedA();
YList.add(Y);
}
return YList;
}
public String getFormula (){
return "Y = " + getTransformedB() + "* Ln(x) + " + getTransformedA();
}
}
private class expCalculate extends calculationAbstract{
// y = exp (b*x+a)
public double getNewX(){
return CurrentPoint.getX();
}
public double getNewY(){
return Math.log(CurrentPoint.getY());
}
public double getTransformedA(){
return this.calculateCommonPart().get(0);
}
public double getTransformedB(){
return this.calculateCommonPart().get(1);
}
public ArrayList<Double> getApproximationY(){
ArrayList <Double> YList = new ArrayList<>();
for (double i = getMaxX0(); i<getMaxX0(); i+=deltaX*0.01){
//double Y = Math.exp(getTransformedB()* pointList.get(i).getX() + getTransformedA());
double Y = Math.exp(getTransformedB()*i + getTransformedA());
YList.add(Y);
}
return YList;
}
public String getFormula (){
return "Y = e^" + getTransformedB() + "*x +" + getTransformedA();
}
}
private class aExpCalculate extends calculationAbstract{
// y = a*exp (b*x)
public double getNewX(){
return CurrentPoint.getX();
}
public double getNewY(){
return Math.log(CurrentPoint.getY());
}
public double getTransformedA(){
return Math.exp(this.calculateCommonPart().get(0));
}
public double getTransformedB(){
return this.calculateCommonPart().get(1);
}
public ArrayList<Double> getApproximationY(){
ArrayList <Double> YList = new ArrayList<>();
for (double i = getMinX0(); i<getMaxX0(); i+=deltaX*0.01){
double Y = getTransformedA()* Math.exp(i * getTransformedB());
YList.add(Y);
}
return YList;
}
public String getFormula (){
return "Y = " + getTransformedA() + "e^(x*" + getTransformedB() + ")";
}
}
private class gipCalculate extends calculationAbstract{
// y = (b/x)+a
public double getNewX(){
return 1.0d/CurrentPoint.getX();
}
public double getNewY(){
return CurrentPoint.getY();
}
public double getTransformedA(){
return this.calculateCommonPart().get(0);
}
public double getTransformedB(){
return this.calculateCommonPart().get(1);
}
public ArrayList<Double> getApproximationY(){
ArrayList <Double> YList = new ArrayList<>();
for (double i = getMinX0(); i<getMaxX0(); i+=deltaX*0.01){
double Y = getTransformedB() / i + getTransformedA();
YList.add(Y);
}
return YList;
}
public String getFormula (){
return "Y = " + getTransformedB() + "/ x + " + getTransformedA();
}
}
private class gip1Calculate extends calculationAbstract{
// y = 1/(bx+a)
public double getNewX(){
return CurrentPoint.getX();
}
public double getNewY(){
return 1.0d/CurrentPoint.getY();
}
public double getTransformedA(){
return this.calculateCommonPart().get(0);
}
public double getTransformedB(){
return this.calculateCommonPart().get(1);
}
public ArrayList<Double> getApproximationY(){
ArrayList <Double> YList = new ArrayList<>();
for (double i = getMinX0(); i<getMaxX0(); i+=deltaX*0.01){
double Y = 1.0 / (getTransformedB()* i + getTransformedA());
YList.add(Y);
}
return YList;
}
public String getFormula (){
return "Y = 1 /(" + getTransformedB() + "* x +" + getTransformedA() +")";
}
}
private class gip2Calculate extends calculationAbstract{
// y = x/(ax+b)
public double getNewX(){
return 1.0d/CurrentPoint.getX();
}
public double getNewY(){
return 1.0d/CurrentPoint.getY();
}
public double getTransformedA(){
return this.calculateCommonPart().get(0);
}
public double getTransformedB(){
return this.calculateCommonPart().get(1);
}
public ArrayList<Double> getApproximationY(){
ArrayList <Double> YList = new ArrayList<>();
for (double i = getMinX0(); i<getMaxX0(); i+=deltaX*0.01){
double Y =i/(getTransformedA()* i + getTransformedB());;
YList.add(Y);
}
return YList;
}
public String getFormula (){
return "Y = x / (" + getTransformedA() + "* x + " + getTransformedB() +")";
}
}
private class RunBtnAction extends AbstractAction{
public RunBtnAction(){
super( "Аппроксимировать" );
}
@Override
public void actionPerformed( ActionEvent e ){
DefaultTableModel model = (DefaultTableModel) dataTable.getModel();
for(int i =0; i<model.getRowCount(); i++ ) {
valueOfX = Double.parseDouble(model.getValueAt(i, 0).toString());
//valueOfX = valueOfX*(graphicsArea.getWidth()/gridSlider.getValue());
valueOfY = Double.parseDouble(model.getValueAt(i, 1).toString());
//valueOfY = valueOfY*(graphicsArea.getHeight()/gridSlider.getValue());
if (graphicsArea.isVisible()) {pointList.clear();}
pointList.add(new Ellipse2D.Double(valueOfX, valueOfY, 5, 5));
}
graphicsArea.setVisible(!graphicsArea.isVisible());
//graphicsScroll.setVisible( !graphicsScroll.isVisible());
graphicsArea.paint(GUI.this.getGraphics());
//graphicsArea.setVisible(!graphicsArea.isVisible());
SwingUtilities.updateComponentTreeUI(GUI.this);
}
}
public GUI(){
runBut = new JButton( new RunBtnAction() );
toolBar = new JToolBar();
toolBar.add(runBut);
toolBar.addSeparator();
toolBar.setFloatable(false);
Dimension dimLeftPanel = new Dimension(300,300);
JPanel menuPanel = new JPanel();
menuPanel.setLayout(new BoxLayout(menuPanel, BoxLayout.Y_AXIS));
leftPanel = new JPanel();
leftPanel.setLayout(new BorderLayout());
menuPanel.setMinimumSize(dimLeftPanel);
menuPanel.setMaximumSize(dimLeftPanel);
menuPanel.setPreferredSize(dimLeftPanel);
dataTableModel = new DefaultTableModel();
dataTableModel.addColumn("X");
dataTableModel.addColumn("Y");
dataTable = new JTable(dataTableModel);
dataTable.setPreferredSize(new Dimension(300, 300));
JScrollPane tableScroll = new JScrollPane(dataTable);
DefaultTableModel model = (DefaultTableModel) dataTable.getModel();
RowSorter<DefaultTableModel> sorter = new TableRowSorter<DefaultTableModel>(model);
((TableRowSorter<DefaultTableModel>) sorter).setSortable(1, false);
dataTable.setRowSorter(sorter);
leftPanel.add(tableScroll);
JPanel tableButtonPanel = new JPanel();
JButton addDataButton = new JButton("Добавить точку");
JButton deleteDataButton = new JButton("Удалить точку");
JButton clearDataButton = new JButton("Очистить таблицу");
addDataButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
addDataInTable();
}
});
tableButtonPanel.add(addDataButton);
deleteDataButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
deleteDataFromTableRow();
}
});
tableButtonPanel.add(deleteDataButton);
clearDataButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
clearDataTable();
}
});
tableButtonPanel.add(clearDataButton);
leftPanel.setMinimumSize( dimLeftPanel);
leftPanel.setMaximumSize( dimLeftPanel);
leftPanel.setPreferredSize( dimLeftPanel );
menuPanel.add(toolBar, BorderLayout.SOUTH);
menuPanel.add(leftPanel);
menuPanel.add(tableButtonPanel);
graphicsArea = new GraphicsArea();
graphicsArea.setVisible( false );
graphicsPanel = new JPanel(new BorderLayout());
graphicsPanel.setMinimumSize(new Dimension(600,600));
graphicsPanel.add(graphicsArea);
setLayout( new BorderLayout() );
add( menuPanel,BorderLayout.WEST );
/*
graphicsScroll = new JScrollPane();
graphicsScroll.add(graphicsPanel);
graphicsScroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
graphicsScroll.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
graphicsScroll.setVisible(false);
graphicsScroll.setPreferredSize(new Dimension(600,600));
*/
add(graphicsPanel);
}
private class GraphicsArea extends JPanel{
private float xn = 10f;
private float yn = 10f;
private double graphicsAreaWidth=0;
private double graphicsAreaHeight=0;
double gridCellNumberY =0;
double gridCellNumberX =0;
private Line2D.Double horizontalAxis;
private Line2D.Double verticalAxis;
public void paint(Graphics g) {
BasicStroke normalStroke = new BasicStroke(1);
BasicStroke boldStroke = new BasicStroke(3);
graphicsAreaHeight = getHeight() - 2*yn;
graphicsAreaWidth = getWidth() - 2*xn;
ArrayList <Double> SKOs = new ArrayList<>();
ArrayList<calculationAbstract> classList = new ArrayList<>();
straighCalculate straighCalculate = new straighCalculate();
classList.add(straighCalculate);
SKOs.add(straighCalculate.getSKO());
logCalculate logCalculate = new logCalculate();
classList.add(logCalculate);
SKOs.add(logCalculate.getSKO());
exponentialCalculate exponentialCalculate = new exponentialCalculate();
classList.add(exponentialCalculate);
SKOs.add(exponentialCalculate.getSKO());
expCalculate expCalculate = new expCalculate();
classList.add(expCalculate);
SKOs.add(expCalculate.getSKO());
aExpCalculate aExpCalculate = new aExpCalculate();
classList.add(aExpCalculate);
SKOs.add(aExpCalculate.getSKO());
gipCalculate gipCalculate = new gipCalculate();
classList.add(gipCalculate);
SKOs.add(gipCalculate.getSKO());
gip1Calculate gip1Calculate = new gip1Calculate();
classList.add(gip1Calculate);
SKOs.add(gip1Calculate.getSKO());
gip1Calculate gip2Calculate = new gip1Calculate();
SKOs.add(gip2Calculate.getSKO());
classList.add(gip2Calculate);
double minValue = straighCalculate.getSKO();
calculationAbstract calc = new straighCalculate();
for (int i =1; i < SKOs.size(); i++){
if(SKOs.get(i)< minValue) {
minValue = SKOs.get(i);
}
}
Rectangle2D graphicAreaRect = new Rectangle2D.Double(getX() + xn, getY() + yn, getWidth() - 2 * xn, getHeight() - 2 * yn);
double scale = 0d;
if(calc.getMaxX0()<= calc.getMaxY0()) {
scale = Math.round(calc.getMaxY0() - Double.parseDouble(dataTable.getValueAt(dataTable.getRowCount() - 2, 1).toString()));
}
if(calc.getMaxX0()>= calc.getMaxY0()) {
scale = Math.round(calc.getMaxX0() - Double.parseDouble(dataTable.getValueAt(dataTable.getRowCount() - 2, 0).toString()));
}
gridCellNumberX = Math.round(scale*dataTable.getRowCount())+1.0d;
gridCellNumberY = Math.round(scale*dataTable.getRowCount())+1.0d;
if (gridCellNumberX >=100 || gridCellNumberY >=100){
gridCellNumberX = Math.round(gridCellNumberX/10)+1;
gridCellNumberY = Math.round(gridCellNumberY/10)+1;
}
//} else if (dataTable.getRowCount() < 10){
//gridCellNumberX =15;
//gridCellNumberY = 15;
//}
//else if (dataTable.getRowCount() > 10){
// gridCellNumberX = dataTable.getRowCount() +dataTable.getRowCount()%10;
//gridCellNumberY = dataTable.getRowCount()+dataTable.getRowCount()%10;
//}
double cellWidth = graphicsAreaWidth/gridCellNumberX;
double cellHeight = graphicsAreaHeight/gridCellNumberY;
Graphics2D painter = (Graphics2D) g;
AffineTransform defaultTransform = painter.getTransform();
painter.setColor(Color.BLACK);
painter.draw(graphicAreaRect);
painter.setPaint(new GradientPaint(xn, yn, Color.WHITE, 400, 400, Color.WHITE));
painter.fill(new Rectangle2D.Double(graphicAreaRect.getX() + 1, graphicAreaRect.getY() + 1, graphicAreaRect.getWidth() - 1, graphicAreaRect.getHeight() - 1));
painter.setColor(Color.BLACK);
painter.setStroke(boldStroke);
painter.setColor(Color.GREEN);
painter.setStroke(boldStroke);
int index =0;
for (int i =0; i< classList.size(); i++){
if (classList.get(i).getSKO() == minValue){
index = i;
}
}
calc = classList.get(index);
ArrayList <Double> YList = calc.getApproximationY();
/*
if (calc.deltaX < 0f && Math.round(calc.getMaxX0() * calc.deltaX) != 0) {
gridCellNumberX = Math.round(calc.getMaxX0() * calc.deltaX) + 1;
} else {
gridCellNumberX = Math.round(calc.getMaxX0() / calc.deltaX);
};
if (calc.deltaY < 0f && Math.round(calc.getMaxY0() * calc.deltaY) != 0) {
gridCellNumberY = Math.round(calc.getMaxY0() * calc.deltaY) + 1f;
} else {
gridCellNumberY = Math.round(calc.getMaxY0() / calc.deltaY)+1f;
};
*/
painter.setColor(Color.LIGHT_GRAY);
painter.setStroke(normalStroke);
for (int j = 1; j < gridCellNumberY; j++) {
Line2D.Double verticalLine = new Line2D.Double(cellWidth*j+xn, yn, cellWidth*j+xn, yn + graphicsAreaHeight);
painter.draw(verticalLine);
}
for (double j = 1; j< gridCellNumberX; j++){
Line2D horizontalLine = new Line2D.Double(xn, cellHeight* j + yn, graphicsAreaWidth + xn, cellHeight * j + yn);
painter.draw(horizontalLine);
}
painter.setColor(Color.BLACK);
verticalAxis = new Line2D.Double(xn, yn, xn, yn + graphicsAreaHeight);
painter.draw(verticalAxis);
horizontalAxis = new Line2D.Double(xn, cellHeight * (gridCellNumberY / 2) + yn, graphicsAreaWidth + xn, cellHeight * (gridCellNumberY / 2) + yn);
painter.draw(horizontalAxis);
painter.drawString(classList.get(index).getFormula(), 120,25);
Path2D path2D = new Path2D.Double();
painter.translate((verticalAxis.getX1()),(horizontalAxis.getY2()));
painter.rotate(Math.toRadians(180));
path2D.moveTo(0,0);
double minX = pointList.get(0).getX();
double maxX = pointList.get(0).getX();
for(int i = 1; i < pointList.size(); i++){
if (pointList.get(i).getX()< minX){
minX = pointList.get(i).getX();
}
if (pointList.get(i).getX() > maxX){
maxX = pointList.get(i).getX();
}
}
ArrayList<Double> XList = new ArrayList<>();
for (double x =minX; x < maxX; x+=(maxX-minX)*0.01) {
//painter.draw(pointList.get(i));
XList.add(x);
}
painter.setColor(Color.GREEN);
for (int i =0; i< XList.size(); i++){
path2D.lineTo(-XList.get(i), YList.get(i));
painter.draw(path2D);
}
painter.setColor(Color.RED);
for (int i =0 ; i< pointList.size(); i++) {
painter.fill(new Ellipse2D.Double(- pointList.get(i).getX(), pointList.get(i).getY(),5,5));
}
painter.setTransform(defaultTransform);
/*
Formatter formatterX = new Formatter();
Formatter formatterY = new Formatter();
painter.setColor(Color.BLACK);
painter.setFont(new Font("Times New Roman", 1,9));
for (int i = 1; i < gridCellNumber; i++) {
double gridSubdivision = minX+ gridCellNumber/i*calc.deltaX;
painter.draw(new Line2D.Double(xn - 2.5, graphicAreaRect.getHeight()/gridCellNumber*i+yn, 2.5 + xn, graphicAreaRect.getHeight()/gridCellNumber*i+yn));
formatterY = new Formatter();
formatterY.format("%4.1f", gridSubdivision);
painter.drawString("" + formatterY, (float) graphicsArea.getX(), (float) graphicsArea.getHeight()/gridCellNumber*i);
}
formatterY.close();
painter.setFont(new Font("Yimes New Roman", Font.BOLD, 9));
for (int j =1; j < gridCellNumber; j++){
double gridSubdivision = j;
formatterX.format("%4.1f", gridSubdivision);
painter.draw(new Line2D.Double( graphicAreaRect.getWidth()/gridCellNumber*j+xn, horizontalAxis.getY1(), (double) graphicAreaRect.getWidth()/gridCellNumber*j+xn, horizontalAxis.getY1() + yn));;
painter.drawString("" + formatterX, (float) graphicsAreaWidth/gridCellNumber*j+xn, (float) horizontalAxis.getY2() + 20);
}
formatterX.close();
*/
}
}
}
Тут все вспомогательные классы приватные. Этот код работает. Теперь я хочу разделить классы по отдельным файлам и сделать их public для этого в общий абстрактный класс я добавил метод
public void setData (DefaultTableModel model) {
this.model = model;
// в этой строке NullPointerException
for (int i = 0; i< this.model.getRowCount(); i++){
this.pointList.add(new Ellipse2D.Double(Double.parseDouble(this.model.getValueAt(i,0).toString()), Double.parseDouble(this.model.getValueAt(i,1).toString()),5,5));
}
}
Этот метод должен копировать модель таблицы и заполнять pointList, но он выдает NullPointerException. Помогите исправить. Напишите комментарии, если нужно, добавлю полный код разделенной программы.