2016-10-18 13 views
1

私は少し問題があるので、私はこのプログラムで作業していましたが、何らかの理由でnullポインタ例外がスローされます。私はそれが動作するようになっているが、作成しようとしている私のJTable、空白のウィンドウが表示されず、ちょうどクラッシュするコードが含まれている場合は表示されません....スレッド「AWT-EventQueue-0」の例外java.lang.NullPointerExceptionと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 

} 
+0

"pack"をどこかに呼び出すべきではありませんか?例を参照してください。https://docs.oracle.com/javase/tutorial/displayCode.html?code=https://docs.oracle.com/javase/tutorial/uiswing/examples/start/HelloWorldSwingProject/src/start/HelloWorldSwing .javaまた、そのトレイルを見てください。https://docs.oracle.com/javase/tutorial/uiswing/ – Fildor

答えて

0

オブジェクトfilArrayがnullです。あなたの方法:

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

ここで私はちょうどそれが作成されなければならないときに、配列の実際のサイズを定義するために、チェックする必要があり、アプリケーションを実行するためにこれらを置きます。

filmArray = new Object[6][6]; //This is just to run the app 
関連する問題