2

我正在尝试找出一种在不引发异常的情况下打印到 JTextArea 的方法。目前我正在抛出 NullPointerException,但是当我尝试打印到 JTextArea 时。我不确定哪里出了问题或为什么。有人请帮助我。谢谢你。

 import java.awt.EventQueue;
 import java.util.LinkedList;
 import java.util.Queue;
 import java.util.Stack;
 import javax.swing.JFrame;
 import javax.swing.JButton;
 import javax.swing.JLabel;
 import javax.swing.JScrollPane;
 import javax.swing.SwingConstants;
 import javax.swing.JTextField;
 import javax.swing.JScrollBar;
 import java.awt.event.ActionListener;
 import java.awt.event.ActionEvent;
 import javax.swing.JTextArea;

 public class TicketLine {

private JFrame frame;
private JTextArea textArea;

public static void main(String[] args) {

    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                TicketLine window = new TicketLine();
                window.frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

public TicketLine() {
    initialize();
}

/**
 * Initialize the contents of the frame.
 */
private void initialize() {

        frame = new JFrame();
        frame.setBounds(100, 100, 450, 300);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(null);

        JButton nextButton = new JButton("Next Person");
        nextButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                Queue<String> queue = new LinkedList<String>();
                queue.offer("Megan");
                queue.offer("Kate");
                queue.offer("Conan");
                queue.offer("Jay");
                queue.offer("Bert");
                queue.offer("Ernie");
                queue.offer("Mickey");
                queue.offer("Goofy");
                queue.offer("Optimus");
                queue.offer("Megatron");

                Stack<String> ticketList = ticketList();

                while(queue.size() > 0)
                          // System.out.println(queue.remove() + " wins tickets to " + ticketList.pop());
    // NullPointerException HAPPENS HERE!
                textArea.setText(queue.remove() + "wins tickets to " + ticketList.pop());
            }
        });
        nextButton.setBounds(165, 197, 106, 23);
        frame.getContentPane().add(nextButton);

        JLabel lblNewLabel = new JLabel("To Display Next Winner Press the Button");
        lblNewLabel.setHorizontalAlignment(SwingConstants.CENTER);
        lblNewLabel.setBounds(90, 156, 245, 30);
        frame.getContentPane().add(lblNewLabel);

        JScrollPane scrollPane = new JScrollPane();
        scrollPane.setBounds(0, 0, 2, 2);
        frame.getContentPane().add(scrollPane);

        JTextArea textArea = new JTextArea();
        textArea.setBounds(90, 38, 245, 91);
        frame.getContentPane().add(textArea);

}

public static Stack<String> ticketList() {
    Stack<String> tickets = new Stack<String>();
    tickets.push("Olympus Has Fallen");
    tickets.push("Jurassic Park");
    tickets.push("The Patriot");
    tickets.push("Matrix");
    tickets.push("Gettysburg");
    tickets.push("Gods and Generals");
    tickets.push("White House Down");
    tickets.add((int) (Math.random() * 5), "Star Wars");
    tickets.add((int) (Math.random() * 5), "Star Wars");
    tickets.add((int) (Math.random() * 5), "Star Wars");
    return tickets;
}
 }

在我有引号的地方,当我以另一种方式切换时,我没有任何问题,除了它不会在 JTextArea 中打印它会在 Eclipse 本身中打印出结果。

4

3 回答 3

6

您正在隐藏变量textArea。代替

JTextArea textArea = new JTextArea();

textArea = new JTextArea();
于 2013-11-04T01:51:53.307 回答
3

您永远不会初始化实例变量textArea,而是声明并初始化一个本地变量:

    JTextArea textArea = new JTextArea();

将该行更改为:

    textArea = new JTextArea();
于 2013-11-04T01:52:51.707 回答
-1

textArea 初始化前的 nextButton.addActionListener(new ActionListener());-__-

于 2013-11-04T02:16:06.883 回答