2013-11-04 65 views
2

我想找出一種方法來打印到JTextArea而不會引發異常。目前我正在拋出一個NullPointerException,但是當我嘗試打印到JTextArea時。我不確定它出錯的地方或原因。有人請幫助我。謝謝。試圖打印到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; 
} 
} 

在那裏我有我沒有任何問題,當我開關(t)左右,除了它不會在它打印出在Eclipse本身的結果JTextArea中打印的其他方式的行情。

+0

後整個例外(包括完整的調用堆棧) –

+0

解決,這是** **很多比實際的解決方案更重要的過程,因爲你肯定會再次遇到NPE。學習的教訓是仔細觀察投擲NPE的線上使用的變量。其中一個是空的,一旦你發現,回溯你的代碼,找出原因。 –

回答

6

你是shadowing變量textArea。更換

JTextArea textArea = new JTextArea(); 

textArea = new JTextArea(); 
+0

謝謝!這讓我很頭疼。 – user2929005

3

你永遠不會初始化實例變量textArea,而是你聲明並初始化一個地方之一:

JTextArea textArea = new JTextArea(); 

更改該行:

textArea = new JTextArea(); 
+0

謝謝你的幫助! – user2929005

-1

nextButton.addActionListener(新的ActionListener()) 前textarea的初始化; -__-

+0

這與手頭的問題無關。 –