Исключение в потоке «AWT-EventQueue-0» java.lang.исключение NullPointerException и проблемы с JTable

#java #swing #file-io #nullpointerexception #jtable

#java #swing #file-io #исключение nullpointerexception #jtable

Вопрос:

У меня небольшая проблема, поэтому я работал над этой программой, и по какой-то причине она выдает мне исключение с нулевым указателем. Я заставил его работать, но он не покажет мою JTable, которую я пытаюсь создать, просто пустое окно, и когда я включаю код, он просто вылетает…. Есть идеи?

 package assignment;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;



public class FilmView extends JPanel
{
    public Object[][] filmArray;
    private FilmDataBase filmModel;
    JTable table;

    //constructor
        public FilmView(FilmDataBase filmModel)
        {
            super(); 
            this.filmModel = filmModel;

            FilmDataBase filmData = new FilmDataBase();
            filmArray = filmData.getArray();

            setLayout(new FlowLayout()); 
            //Column Headers 
            String[] columnHeaders = {"Title", "Date", "Director", "Rating", "Genre", "Cast"};

            table = new JTable(filmArray, columnHeaders); 
            table.setPreferredScrollableViewportSize(new Dimension(500,80));
            table.setFillsViewportHeight(true);

            JScrollPane scrollPane = new JScrollPane(table);
            add(scrollPane);



        }

}


package assignment;

import java.awt.BorderLayout;

import javax.swing.JFrame;

public class AppController extends JFrame
{   
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private FilmView view;
    private FilmDataBase filmModel;

    public AppController(String string)
    {
        super(string);

        this.filmModel = new FilmDataBase();
        this.view = new FilmView(this.filmModel);

        getContentPane().add(view, BorderLayout.CENTER);
        setSize(1000, 800);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }

    public static void main(String [] args)
    {   
        JFrame c = new AppController("FilmDataBase"); 
        c.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        c.setSize(600, 200);
        c.setVisible(true);
    }
}


    package assignment;

    import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;


public class FilmDataBase
{
    private Scanner scanner = new Scanner(System.in);
    Scanner fileScan;
    private int film;
    Object filmData[][];
    private int filmDetails;
    public void initaliseFilmData() throws IOException, InterruptedException
    {   
        Scanner scanner = new Scanner(System.in);

        film = 4;
        filmDetails = 6;
        filmData = new Object[film][filmDetails];

        Scanner fileScan;

        fileScan = new Scanner(new File("input/filminformation.txt"));


            for(int x = 1; x < film; x  )
                {
                    for(int y = 1; y < filmDetails; y  )
                    {
                        if(y == 5)
                        {
                            filmData[x][y] = fileScan.nextLine();
                            fileScan.nextLine().split(", ");
                        }
                        else if(y == 6)
                        {
                            filmData[x][y] = fileScan.nextLine(); 
                            fileScan.nextLine().split(", ");
                        }
                        else 
                        {
                            filmData[x][y] = fileScan.nextLine();
                        }
                    }
                }

        fileScan.close();

    }

    public Object[][] getArray()
    {
        return filmData;
    }
    enter code here

}
  

Комментарии:

1. Разве где-то не должно быть вызова «pack»? Смотрите пример: docs.oracle.com/javase/tutorial/displayCode.html?code=https ://… Может быть, вам тоже стоит взглянуть на этот след… docs.oracle.com/javase/tutorial/uiswing

Ответ №1:

Ваш файловый массив объекта равен нулю. Ваш метод:

 filmArray = filmData.getArray(); //Is returning a null object.
  

Здесь я просто помещаю их для запуска приложения, вы должны проверить, когда оно должно быть создано, чтобы определить реальный размер массива.

 filmArray = new Object[6][6]; //This is just to run the app