给出Null的JButton actionPerformed方法

时间:2017-02-21 19:35:59

标签: java swing events event-handling actionlistener

所以我有一个程序我正在编写,允许用户为我设计的“Novel”和“Magazine”类的属性输入文本值,但是我的actionListener出现了问题。每当我触发动作时,都会给我一个空指针异常。我的猜测是它与我有切换语句

有关
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()方法,然后显示使用这两个类包含的toString()方法创建的对象的JOptionPane的消息对话框。我知道问题不是来自这两个类的方法语法,所以我不一定了解问题的来源。

这是源代码:

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

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

默认情况下,Java将null赋给新定义的变量。这个静态变量

.row.match-my-cols {
    overflow: hidden; 
}

.row.match-my-cols [class*="col-"]{
    margin-bottom: -99999px;
    padding-bottom: 99999px;
}

传递给static Magazine theMagazine; 方法时,

为null。

您需要创建新的Magazine对象(或以某种方式加载它)并将其分配给createObject(...)变量。