2011-02-02 2 views
0

Итак, на этот раз я пробовал это. Я использовал JMenuItem и JPopupMenu, и я получаю этот NPE.Nullpointerexception on line 32 (java)

Когда я пытаюсь запустить его, я получаю эту ошибку:

java.lang.NullPointerException 
     at inv.init(inv.java:28) 
     at sun.applet.AppletPanel.run(AppletPanel.java:424) 
     at java.lang.Thread.run(Thread.java:619) 

Dang.

Вот код:

import java.awt.*; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseListener; 
import java.awt.event.MouseAdapter; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.*; 
import javax.swing.border.*; 
import javax.swing.event.*; 

public class inv extends JApplet implements MouseListener 
{ 
    public JList listbox; 
    public JPopupMenu popup; 
    public JMenuItem item; 

    public void init() 
    { 
     ActionListener menuListener = new ActionListener() 
     { 
      public void actionPerformed(ActionEvent event) 
      { 
       String invAction = event.getActionCommand(); 
       System.out.println("Popup menu item [" + invAction + "] was pressed."); 
      } 
     }; 

     popup.add(item = new JMenuItem("Use")); 
     item.setHorizontalTextPosition(JMenuItem.RIGHT); 
     item.addActionListener(menuListener); 
     popup.add(item = new JMenuItem("Drop")); 
     item.setHorizontalTextPosition(JMenuItem.RIGHT); 
     item.addActionListener(menuListener); 
     popup.add(item = new JMenuItem("Cancel")); 
     item.setHorizontalTextPosition(JMenuItem.RIGHT); 
     item.addActionListener(menuListener); 
     addMouseListener(new MousePopupListener()); 

     String listData[] = 
     { 
      "Item 1","Item 2","Item 3","Item 4" 
     }; 

     listbox = new JList(listData); 
     listbox.addMouseListener(new MouseAdapter() 
     { 
      public void mousePressed(MouseEvent e) 
      { 
       if (SwingUtilities.isRightMouseButton(e)) 
       { 
        System.out.println("Row: " + getRow(e.getPoint())); 
        listbox.setSelectedIndex(getRow(e.getPoint())); 
       } 
      } 
     } 
     ); 

     listbox.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 
     add(listbox); 
     listbox.setVisible(true); 
     listbox.setFocusable(false); 
    } 

    class MousePopupListener extends MouseAdapter 
    { 
     public void mousePressed(MouseEvent e) 
     { 
      checkPopup(e); 
     } 

     public void mouseClicked(MouseEvent e) 
     { 
      checkPopup(e); 
     } 

     public void mouseReleased(MouseEvent e) 
     { 
      checkPopup(e); 
     } 

     private void checkPopup(MouseEvent e) 
     { 
      if (e.isPopupTrigger()) 
      { 
       popup.show(inv.this, e.getX(), e.getY()); 
      } 
     } 
    } 

    private int getRow(Point point) 
    { 
     return listbox.locationToIndex(point); 
    } 

    public void mouseEntered(MouseEvent e) 
    { 
    } 

    public void mouseReleased(MouseEvent e) 
    { 
    } 

    public void mousePressed(MouseEvent e) 
    { 
    } 

    public void mouseClicked(MouseEvent e) 
    { 
    } 

    public void mouseExited(MouseEvent e) 
    { 
    } 
} 
+0

Что такое линия 28? – Will

ответ

4

всплывающее окно является пустым, пока не будет создан объект.

Создайте всплывающее окно члена JPopupMenu перед добавлением к нему элементов.

+0

Спасибо, я понял. – nn2

0

popup не был инициализирован.