#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