所以我有一個程序,我正在寫,以允許用戶輸入文本值的「小說」和「雜誌」類的設計,但我有一個問題的屬性用我的actionListener,當我觸發這個動作的時候,它給了我一個空指針異常。我的猜測是它有話跟我有switch語句JButton actionPerformed方法提供空
switch(theList.getSelectedIndex()){
case -1: JOptionPane.showMessageDialog(null, "You did not select an object type to create!", "Error!", JOptionPane.ERROR_MESSAGE);
break;
case 0: createObject(theMagazine, titleField, authorField, publisherField, publisherLocationField, copyrightYearField, priceEnterField, ISBNEnterField);
JOptionPane.showMessageDialog(null, theMagazine.toString(), "This is The Magazine You Created!", JOptionPane.INFORMATION_MESSAGE);
break;
case 1: createObject(theNovel, titleField, authorField, publisherField, publisherLocationField, copyrightYearField, priceEnterField, ISBNEnterField);
theNovel.setHardCover(Boolean.parseBoolean(JOptionPane.showInputDialog(null,"Is this Book a hard cover or not?","Question!",JOptionPane.QUESTION_MESSAGE)));
JOptionPane.showMessageDialog(null, theNovel.toString(), "This is The Magazine You Created!", JOptionPane.INFORMATION_MESSAGE);
break;
}
本質上講,我希望它做的是能夠調用適當的屬性值的CreateObject()方法,然後顯示的JOptionPane的消息對話框對於使用這兩個類所包含的toString()方法創建的對象。我知道這個問題不是來自任何一個類的方法語法,所以我不一定明白問題出在哪裏。
這是源代碼:
import javax.swing.*;
import javax.swing.border.*;
import java.awt.event.*;
import java.awt.*;
@SuppressWarnings({"serial"})
public class GUI extends JFrame{
static Magazine theMagazine;
static Novel theNovel;
public static void main(String[] args){
final String[] objectTypes = {"Magazine","Novel"};
final Border textFieldBorder = BorderFactory.createLineBorder(Color.black, 1);
final Font theFont = new Font("Times New Roman", 0, 25);
final JLabel typeSelect = new JLabel("Please select the literature type!");
final JLabel titleEnter = new JLabel("Enter the title here!");
final JLabel authorEnter = new JLabel("Enter the Author here!");
final JLabel publisherEnter = new JLabel("Enter the publisher here!");
final JLabel pubLocationEnter = new JLabel("Enter the Publishers location here");
final JLabel enterCopyrightYear = new JLabel("Enter the copyright year here!");
final JLabel priceEnter = new JLabel("Enter the price here!");
final JLabel ISBNEnter = new JLabel("Enter the ISBN here!");
JList<String> theList = new JList<String>(objectTypes);
theList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
theList.setLayoutOrientation(JList.HORIZONTAL_WRAP);
theList.setVisibleRowCount(-1);
theList.setBorder(textFieldBorder);
theList.setFont(theFont);
JTextField titleField = new JTextField();
titleField.setBorder(textFieldBorder);
titleField.setFont(theFont);
titleField.setHorizontalAlignment(JTextField.CENTER);
JTextField authorField = new JTextField();
authorField.setBorder(textFieldBorder);
authorField.setFont(theFont);
authorField.setHorizontalAlignment(JTextField.CENTER);
JTextField publisherField = new JTextField();
publisherField.setBorder(textFieldBorder);
publisherField.setFont(theFont);
publisherField.setHorizontalAlignment(JTextField.CENTER);
JTextField publisherLocationField = new JTextField();
publisherLocationField.setBorder(textFieldBorder);
publisherLocationField.setFont(theFont);
publisherLocationField.setHorizontalAlignment(JTextField.CENTER);
JTextField copyrightYearField = new JTextField();
copyrightYearField.setBorder(textFieldBorder);
copyrightYearField.setFont(theFont);
copyrightYearField.setHorizontalAlignment(JTextField.CENTER);
JTextField priceEnterField = new JTextField();
priceEnterField.setBorder(textFieldBorder);
priceEnterField.setFont(theFont);
priceEnterField.setHorizontalAlignment(JTextField.CENTER);
JTextField ISBNEnterField = new JTextField();
ISBNEnterField.setBorder(textFieldBorder);
ISBNEnterField.setFont(theFont);
ISBNEnterField.setHorizontalAlignment(JTextField.CENTER);
JButton createObject = new JButton("Create an Object!");
createObject.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event){
switch(theList.getSelectedIndex()){
case -1: JOptionPane.showMessageDialog(null, "You did not select an object type to create!", "Error!", JOptionPane.ERROR_MESSAGE);
break;
case 0: createObject(theMagazine, titleField, authorField, publisherField, publisherLocationField, copyrightYearField, priceEnterField, ISBNEnterField);
JOptionPane.showMessageDialog(null, theMagazine.toString(), "This is The Magazine You Created!", JOptionPane.INFORMATION_MESSAGE);
break;
case 1: createObject(theNovel, titleField, authorField, publisherField, publisherLocationField, copyrightYearField, priceEnterField, ISBNEnterField);
theNovel.setHardCover(Boolean.parseBoolean(JOptionPane.showInputDialog(null,"Is this Book a hard cover or not?","Question!",JOptionPane.QUESTION_MESSAGE)));
JOptionPane.showMessageDialog(null, theNovel.toString(), "This is The Magazine You Created!", JOptionPane.INFORMATION_MESSAGE);
break;
}
}
});
JButton closeProgram = new JButton("Close the program!");
closeProgram.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event){
System.exit(0);
}
});
JPanel thePanel = new JPanel();
thePanel.setLayout(new GridLayout(9,2));
JFrame theFrame;
//first row
thePanel.add(typeSelect);
thePanel.add(theList);
//second row
thePanel.add(titleEnter);
thePanel.add(titleField);
//third row
thePanel.add(authorEnter);
thePanel.add(authorField);
//fourth row
thePanel.add(publisherEnter);
thePanel.add(publisherField);
//fifth row
thePanel.add(pubLocationEnter);
thePanel.add(publisherLocationField);
//sixth row
thePanel.add(enterCopyrightYear);
thePanel.add(copyrightYearField);
//seventh row
thePanel.add(priceEnter);
thePanel.add(priceEnterField);
//eighth row
thePanel.add(ISBNEnter);
thePanel.add(ISBNEnterField);
//ninth row
thePanel.add(createObject);
thePanel.add(closeProgram);
theFrame = new JFrame();
theFrame.add(thePanel);
theFrame.setTitle("Literature Creator!");
theFrame.setSize(500,500);
theFrame.setVisible(true);
theFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
theFrame.setResizable(false);
}
public static void createObject(Literature theLiterature, JTextField titleField, JTextField authorField, JTextField publisherField, JTextField publisherLocationField,
JTextField copyrightYearField, JTextField priceEnterField, JTextField ISBNEnterField){
theLiterature.setTitle(parseField(titleField));
theLiterature.setAuthor(parseField(authorField));
theLiterature.setPublisher(parseField(publisherField));
theLiterature.setPublisherLocation(parseField(publisherLocationField));
theLiterature.setCopyrightYear(parseNumField(copyrightYearField));
theLiterature.setPrice(parseNumField(priceEnterField));
theLiterature.setISBN(parseNumField(ISBNEnterField));
}
public static String parseField(JTextField field){
if(field.getText() == null){
JOptionPane.showMessageDialog(null, "Error! " + field.getName() + " contains no text!", "Error", JOptionPane.ERROR_MESSAGE);
System.exit(0);
}
return field.getText();
}
public static int parseNumField(JTextField field){
if(field.getText() == null){
JOptionPane.showMessageDialog(null, "Error! " + field.getName() + " contains no text!", "Error", JOptionPane.ERROR_MESSAGE);
System.exit(0);
}
try{
Integer.parseInt(field.getText());
}catch(NumberFormatException nfe){
JOptionPane.showMessageDialog(null, "Error! Value in field " + field.getName() + " was not a valid number!", "Error!", JOptionPane.ERROR_MESSAGE);
System.exit(0);
}
return Integer.parseInt(field.getText());
}
}
這裏是從錯誤信息文本:http://pastebin.com/HRi9jbSD
任何幫助,不勝感激!
那麼你在哪裏設置'theMagazine'爲null而不是null? –
@DM hahahahaha它看起來就像我做的那樣無處不在...哎呦,我猜想是一個愚蠢的錯誤,但它是漫長的一天。謝謝! –