2013-03-04 4 views
1

저는 Java 및 Java Swing을 처음 사용하기 때문에 제대로 작동하지 않습니다. 나는 2 개의 텍스트 필드를 가지고 있으며, textfield1의 텍스트는 버튼을 클릭하여 텍스트 필드 2에 전달되어야하지만, 끊임없이 충돌합니다. 나는 그것을 실행할 때 오류의 거대한 목록을 제공Java Swing Textfield 오류

package javaapplication7; 

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.*; 


public class JavaApplication7 { 

    public static void main(String[] args) { 
     JFrame theFrame = new JFrame(); 
     theFrame.setTitle("Title"); 
     theFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     theFrame.setSize(400, 400); 
     theFrame.setLocation(400, 400); 

     theFrame.setContentPane(new Paneel()); 
     theFrame.setVisible(true); 
    } 
} 

class Paneel extends JPanel{ 
      JButton button1; 
      JTextField field1; 
      JTextField field2; 


    public Paneel(){ 
      JButton button1 = new JButton("Click"); 
      button1.addActionListener(new KH()); 
      add(button1); 

      JTextField field1 = new JTextField(10); 
      add(field1); 

      JTextField field2 = new JTextField(10); 
      add(field2); 
    } 


    class KH implements ActionListener{ 
     @Override 
     public void actionPerformed(ActionEvent e){ 
      field2.setText(field1.getText()); 
     } 
    } 
} 

사람에게 어떤 생각을 가지고 여기에

코드인가?

오류 목록 :

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
    at javaapplication7.Paneel$KH.actionPerformed(JavaApplication7.java:54) 
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) 
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341) 
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) 
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) 
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) 
    at java.awt.Component.processMouseEvent(Component.java:6505) 
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3321) 
    at java.awt.Component.processEvent(Component.java:6270) 
    at java.awt.Container.processEvent(Container.java:2229) 
    at java.awt.Component.dispatchEventImpl(Component.java:4861) 
    at java.awt.Container.dispatchEventImpl(Container.java:2287) 
    at java.awt.Component.dispatchEvent(Component.java:4687) 
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) 
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492) 
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) 
    at java.awt.Container.dispatchEventImpl(Container.java:2273) 
    at java.awt.Window.dispatchEventImpl(Window.java:2719) 
    at java.awt.Component.dispatchEvent(Component.java:4687) 
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:729) 
    at java.awt.EventQueue.access$200(EventQueue.java:103) 
    at java.awt.EventQueue$3.run(EventQueue.java:688) 
    at java.awt.EventQueue$3.run(EventQueue.java:686) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) 
    at java.awt.EventQueue$4.run(EventQueue.java:702) 
    at java.awt.EventQueue$4.run(EventQueue.java:700) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:699) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) 
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:91) 
+1

오류가 무엇인지 추측 할 수 있습니까? –

+0

코드를 다시 확인하십시오. 업데이트했습니다. –

답변

3

당신은 현재 변수 button1, field1, Paneel에서 field2, 당신은 Paneel의 생성자에서 이러한 구성 요소의 지역 인스턴스를 생성되지만이 이름을 가진 클래스 멤버 변수는 결과 null 남아 즉을 그림자 NPE.

public Paneel(){ 
    button1 = new JButton("Click"); 
    ... 
    field1 = new JTextField(10); 
    ... 
    field2 = new JTextField(10); 
    ... 
} 
+0

그 문제를 해결하는 방법을 모르겠습니다. 예를 들어 주시겠습니까? –

+0

위에서 보았 듯이'JButton'과'JTextField' 타입의 키워드를 제거하십시오 :) – Reimeus

+0

당신이 해결했습니다! 고맙습니다. –

2

당신은 새로운 지역 "Button1을"선언 "필드 1"대신 인스턴스 변수를 초기화하는 생성자 내부 "FIELD2"변수.

2

를 사용하여 실제로 Paneel 생성자이 코드 : JButtonJTextField 키워드를 입력하면 의도 된 클래스 멤버 변수에 구성 요소를 할당을 제거함으로써

. 당신이 당신의 생성자에서 만든

 public Paneel(){ 
     JButton button1 = new JButton("Click"); 
     button1.addActionListener(new KH()); 
     add(button1); 

     field1 = new JTextField(10); 
     add(field1); 

     field2 = new JTextField(10); 
     add(field2); 
     } 

field1field2는 생성자 지역입니다. Paneel 클래스의 구성원 필드 (field1field2)는 여전히 null입니다. 따라서 actionPerformedNullPointerException을 던지고 있습니다.