2014-05-05 102 views
-2
import java.awt.BorderLayout; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 
public class ClosetTableUI extends JFrame{ 

public ClosetTableUI(ClosetTableCntl theCreatingCntl){ 
    initComponents(); 
theCTCntl = theCreatingCntl; 

} 

InitComponents是初始化所有變量的位置。初始化期間的空變量

private void initComponents() { 

    if(theTopTable == null){ 
     System.out.println("Top Table was null"); 
    } 
    if(theCTCntl.getTopTableModel() == null){ 
     System.out.println("get Top Table Model was null"); 
    } 

這是發生錯誤:

theTopTable = new JTable(theCTCntl.getTopTableModel()); 


    topNewButton = new javax.swing.JButton(); 
    topDeleteButton = new javax.swing.JButton(); 
    topScrollPane = new javax.swing.JScrollPane(theTopTable); 
    theBottomTable = new JTable(theCTCntl.getBottomModel()); 
    bottomScrollPane = new javax.swing.JScrollPane(theBottomTable); 
    bottomNewButton = new javax.swing.JButton(); 
    bottomDeleteButton = new javax.swing.JButton(); 
    theAccessoryTable = new JTable(theCTCntl.getAccessoryModel()); 
    accessoryScrollPane = new javax.swing.JScrollPane(theAccessoryTable); 
    topTextField = new javax.swing.JTextField(); 
    bottomTextField = new javax.swing.JTextField(); 
    accessoryTextField = new javax.swing.JTextField(); 

這剩下的只是的NetBeans GUI構建器來設置各種屬性。

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 

    topNewButton.setText("New Top"); 

    topDeleteButton.setText("Delete Top"); 

    bottomNewButton.setText("New Bottom"); 

    bottomDeleteButton.setText("Delete Bottom"); 

    accessoryNewButton.setText("New Accessory"); 

    accessoryDeleteButton.setText("Delete Accessory"); 

    topTextField.setText("Enter New Top Here"); 

    bottomTextField.setText("Enter New Bottom Here"); 

    accessoryTextField.setText("Enter New Accessory Here"); 

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
    getContentPane().setLayout(layout); 
    layout.setHorizontalGroup(
     layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(layout.createSequentialGroup() 
      .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
       .addGroup(layout.createSequentialGroup() 
        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
         .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) 
          .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup() 
           .addComponent(topDeleteButton) 
           .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 114, Short.MAX_VALUE) 
           .addComponent(topNewButton)) 
          .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) 
           .addComponent(bottomNewButton) 
           .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) 
            .addComponent(bottomScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 274, Short.MAX_VALUE) 
            .addComponent(topScrollPane)))) 
         .addComponent(bottomDeleteButton)) 
        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
         .addComponent(bottomTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 157, javax.swing.GroupLayout.PREFERRED_SIZE) 
         .addComponent(topTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 159, javax.swing.GroupLayout.PREFERRED_SIZE))) 
       .addGroup(layout.createSequentialGroup() 
        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) 
         .addComponent(accessoryScrollPane, javax.swing.GroupLayout.Alignment.LEADING) 
         .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup() 
          .addComponent(accessoryDeleteButton) 
          .addGap(55, 55, 55) 
          .addComponent(accessoryNewButton))) 
        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
        .addComponent(accessoryTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 157, javax.swing.GroupLayout.PREFERRED_SIZE))) 
      .addContainerGap(60, Short.MAX_VALUE)) 
    ); 
    layout.setVerticalGroup(
     layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(layout.createSequentialGroup() 
      .addContainerGap() 
      .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
       .addComponent(topNewButton) 
       .addComponent(topDeleteButton) 
       .addComponent(topTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) 
      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
      .addComponent(topScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 103, javax.swing.GroupLayout.PREFERRED_SIZE) 
      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
      .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
       .addComponent(bottomDeleteButton) 
       .addComponent(bottomNewButton) 
       .addComponent(bottomTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) 
      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) 
      .addComponent(bottomScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 110, javax.swing.GroupLayout.PREFERRED_SIZE) 
      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) 
      .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
       .addComponent(accessoryDeleteButton) 
       .addComponent(accessoryNewButton) 
       .addComponent(accessoryTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) 
      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
      .addComponent(accessoryScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 111, javax.swing.GroupLayout.PREFERRED_SIZE) 
      .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) 
    ); 
    accessoryDeleteButton.addActionListener(new DeleteAccessoryListener()); 
    accessoryNewButton.addActionListener(new NewAccessoryListener()); 
    topNewButton.addActionListener(new NewTopListener()); 
    topDeleteButton.addActionListener(new DeleteTopListener()); 
    bottomDeleteButton.addActionListener(new DeleteBottomListener()); 
    bottomNewButton.addActionListener(new NewBottomListener()); 


    this.setVisible(true); 
    pack(); 

}// </editor-fold>       

這裏是我的變量聲明:

private javax.swing.JButton accessoryDeleteButton; 
private javax.swing.JButton accessoryNewButton; 
private javax.swing.JScrollPane accessoryScrollPane; 
private javax.swing.JTextField accessoryTextField; 
private javax.swing.JButton bottomDeleteButton; 
private javax.swing.JButton bottomNewButton; 
private javax.swing.JScrollPane bottomScrollPane; 
private javax.swing.JTextField bottomTextField; 
private javax.swing.JButton topDeleteButton; 
private javax.swing.JButton topNewButton; 
private javax.swing.JScrollPane topScrollPane; 
private javax.swing.JTextField topTextField; 
JTable theTopTable; 
JTable theBottomTable; 
JTable theAccessoryTable; 
ClosetTableCntl theCTCntl; 

最後,這裏是輸出和錯誤消息,我已經收到

Top Table was null 
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
at fashionforecast2.ClosetTableUI.initComponents(ClosetTableUI.java:35) 
at fashionforecast2.ClosetTableUI.<init>(ClosetTableUI.java:22) 
at fashionforecast2.ClosetTableCntl.<init>(ClosetTableCntl.java:15) 
at fashionforecast2.MainMenuCntl.getClosetTableCntl(MainMenuCntl.java:29) 
at fashionforecast2.MainMenuUI$ClosetListener.actionPerformed(MainMenuUI.java:70) 

從我一起收集起來,我的varible theTopTable爲null。但我不確定這是爲什麼。我將變量聲明在我的類的底部,然後當它給出一個空錯誤時,我正在初始化該變量。

我很困惑的是這個;爲什麼在嘗試初始化TopTable時收到空錯誤?當然TopTable是null,我還沒有初始化它。但它給我的錯誤,我試圖初始化它在線

任何幫助將不勝感激。

回答

1

initComponents方法有下面這行代碼:

if(theCTCntl.getTopTableModel() == null){ 
    System.out.println("get Top Table Model was null"); 
} 

theCTCntl這裏是null因爲調用initComponents在類的構造函數之後被初始化:

public ClosetTableUI(ClosetTableCntl theCreatingCntl){ 
    initComponents(); 
    theCTCntl = theCreatingCntl; 
} 

只要改變你的代碼的順序:

public ClosetTableUI(ClosetTableCntl theCreatingCntl){ 
    theCTCntl = theCreatingCntl; 
    initComponents(); 
} 

更多信息:

+0

嗯,這做到了。你知道爲什麼如果我的控制器是空的,它會觸發嗎? if(theCTCntl.getTopTableModel()== null){System.out.println(「get Top Table Model was null」); } – Tritonis

+0

@ user2966511,因爲你不能調用任何方法,也不能調用'null'變量的屬性。在這裏執行'CTCntl.getTopTableModel()'就像調用'null.getTopTableModel()',這會得到'NullPointerException'。 –

+0

所以在未來,如果我想測試這樣的東西,是否會更好地做tempVar = theCTCntl.getTopTableModel(),然後測試tempVar是否爲空? – Tritonis