-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,我還沒有初始化它。但它給我的錯誤,我試圖初始化它在線
任何幫助將不勝感激。
嗯,這做到了。你知道爲什麼如果我的控制器是空的,它會觸發嗎? if(theCTCntl.getTopTableModel()== null){System.out.println(「get Top Table Model was null」); } – Tritonis
@ user2966511,因爲你不能調用任何方法,也不能調用'null'變量的屬性。在這裏執行'CTCntl.getTopTableModel()'就像調用'null.getTopTableModel()',這會得到'NullPointerException'。 –
所以在未來,如果我想測試這樣的東西,是否會更好地做tempVar = theCTCntl.getTopTableModel(),然後測試tempVar是否爲空? – Tritonis