2016-12-09 1 views
0

는 JFrame의 구성 요소에 메도를 해고 할 수 없습니다 내가 해주 발사 버튼 Marchewkaim 점점 오류 널 포인터 예외하려는 경우 :내가 문제를 가지고 어디 여기

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); 
    } 
    } 
} 

} 

I을 혼자서이 오류를 해결하려고했지만 아무 것도 가리키지 않는 곳을 찾을 수 없습니다. 이것을 6 시간 동안하고 병 들고 피곤합니다. 몇 가지 팁을 찾고 있습니다.

+0

'btnMarchewka'를 의미합니까? 또한 Java 규약으로 인해 메소드에'Draw()'를 쓰지 말고'draw()'에 이름을 붙이면 안됩니다. 제 생각에'Draw()'- 메서드는'repaint()'전에'validate()'가 없습니다. – hamena314

답변

0

MainFrame 클래스에는 mp를 초기화하는 getMp() 메서드가 있지만 mp.repaint()를 호출 할 때 Draw() 메서드에서 NPE를 발생시키는 호출은하지 않습니다. 일부 미사용 변수도 MyPanel 클래스에 있습니다.

관련 문제