2016-12-09 55 views
0

這裏是我有一個問題: 當我想OT消防按鈕Marchewkaim得到錯誤空指針異常:不能在火JFrame組件梅索德

public class MainFrame extends JFrame { 
public static void Draw() 
{ 
    mp.repaint(); 
} 
private static final long serialVersionUID = 1L; 
private JPanel jContentPane = null; 
static private MyPanel mp = null; 

/** 
* This method initializes mp 
* 
* @return MyPanel 
*/ 
private MyPanel getMp() { 
    if (mp == null) { 
     mp = new MyPanel(); 
     mp.setLayout(null); 
    } 
    return mp; 
} 

/** 
* @param args 
*/ 
public static void main(String[] args) { 

    // TODO Auto-generated method stub 
    SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      MainFrame thisClass = new MainFrame(); 
      thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      thisClass.setVisible(true); 
     } 
    }); 



} 

/** 
* This is the default constructor 
*/ 
public MainFrame() { 
    super(); 
    initialize(); 
} 

/** 
* This method initializes this 
* 
* @return void 
*/ 
private JPanel getJContentPane() { 
    if (jContentPane == null) { 
     jContentPane = new JPanel(); 
     jContentPane.setLayout(new CardLayout(0, 0)); 

    } 
    return jContentPane; 
} 
private void initialize() { 

    this.setSize(668, 402); 
    this.setContentPane(getJContentPane()); 
    this.setTitle("JFrame"); 
    JPanel panel = new JPanel(); 
    panel.setLayout(null); 
    this.getContentPane().add(panel, "Main"); 
    panel.setVisible(true); 
    JButton btnMarchewka = new JButton("Marchewka"); 
    btnMarchewka.setBounds(12, 25, 113, 49); 
    panel.add(btnMarchewka); 

    JButton btnArbuz = new JButton("Arbuz"); 
    btnArbuz.setBounds(12, 87, 113, 49); 
    panel.add(btnArbuz); 

    JButton btnUsun = new JButton("Usun ostatni"); 
    btnUsun.setBounds(12, 149, 113, 49); 
    panel.add(btnUsun); 
    btnMarchewka.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) 
     { 
      Draw(); 
     } 
    }); 

} 

/** 
* This method initializes jContentPane 
* 
* @return javax.swing.JPanel 
*/ 


} // @jve:decl-index=0:visual-constraint="10,10" 

另一類

public class MyPanel extends JPanel { 

public GObject c; 
public GObject w; 
// @jve:decl-index=0: 
private static final long serialVersionUID = 1L; 
public List<GObject> list= new ArrayList<GObject>(); 
/** 
* This is the default constructor 
*/ 
public MyPanel() { 
    super(); 
    initialize(); 
} 
public void addCarrot() 
{ 
    GObject[] c=new GObject[list.size()+1]; 
    c[list.size()]=new Carrot(); 
    list.add(c[list.size()]); 
    MainFrame.Draw(); 
    } 
public void addWatermelon() 
{ 
    GObject[] w=new Watermelon[list.size()+1]; 
    w[list.size()]=new Watermelon(); 
    list.add(w[list.size()]); 

    MainFrame.Draw(); 
    } 
    public void remove() 
    { 
    list.remove(list.size()-1); 

    MainFrame.Draw(); 
    } 
    /** 
* This method initializes this 
* 
* @return void 
*/ 
private void initialize() { 
    this.setSize(400, 400); 
    this.setLayout(null); 
} 
@Override 
protected void paintComponent(Graphics arg0) { 
    // TODO Auto-generated method stub 
    super.paintComponent(arg0); 
    if 
      (list!=null){ 
    for(int i=0;i<list.size();i++) 
    { 
     list.get(i).drawMe(arg0); 
    } 
    } 
} 

} 

我試圖自己解決這個錯誤,但我無法找到我什麼都沒有指向的地方。這樣做6小時,我im病了,累了。我在尋找一些提示。

+0

你的意思是'btnMarchewka'?由於Java約定,你也不應該命名你的方法'Draw()'而是'draw()'。我認爲你的'Draw()'方法在repaint()'之前缺少'validate()'。 – hamena314

回答

0

在MainFrame類中,您有getMp()方法來初始化mp,但是當您調用mp.repaint()時,它從不調用從Draw()方法導致的NPE。 一些未使用的變量也存在於MyPanel類中。

相關問題