Итак, у меня есть программа, которую я пишу, чтобы позволить пользователю вводить текстовые значения для атрибутов класса «Роман» и «Журнал», которые я разработал, однако у меня возникла проблема с моим средством actionListener, где он дает мне исключение с нулевым указателем всякий раз, когда я запускаю действие. Я думаю, это что-то делать со мной имея в Заявлении переключательJButton actionPerformed метод, предоставляющий Null
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? –
@DM hahahahaha было бы похоже, что я сделал это нигде ... Упс, глупая ошибка, я думаю, но это был долгий длинный день. Спасибо! –