我正在尝试找出一种在不引发异常的情况下打印到 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 本身中打印出结果。