2013-10-15 2 views
-1

내 행동 Listener가 잘못되어있는 곳을 알려주시겠습니까? 내가 코드와 아래의 오류를 게시합니다, 그 나에게 절대적으로 미친 운전하고 ..동작 수신기가 올바르게 작동하지 않습니까?

btnEdit.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       EditItem editFrame = new EditItem(sc, orderTextField, numofItemsField, totalCostField); 

      } 
     }); 

package Assesment; 

import java.awt.BorderLayout; 
import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JButton; 
import javax.swing.JComboBox; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JTextArea; 
import javax.swing.JTextField; 

public class EditItem { 

    private ShoppingCart sc; 
    private JTextArea orderTextField; 
    private JTextField numItemsField; 
    private JTextField totalCostField; 
    private JTextField orderNumberJTextField; 
    private JButton buttonEdit; 

    private JComboBox comOrderNumber; 
    private JTextField txtFieldName; 
    private JTextField txtFieldQuantity; 
    private JTextField txtFieldPrice ; 

    public EditItem(ShoppingCart sc, JTextArea orderTextField, 

     JTextField numItemsField, JTextField totalCostField) { 
     this.sc = sc; 
     this.orderTextField = orderTextField; 
     this.numItemsField = numItemsField; 
     this.totalCostField = totalCostField; 

     build(); 
     addActionListeners(); 
    } 

    private void build() { 
     // creates a main frame called editMainFrame1 
     JFrame editMainFrame1 = new JFrame("Edit"); 
     editMainFrame1.setVisible(true); 
     editMainFrame1.setLayout(new GridLayout(5, 1)); 
     editMainFrame1.setResizable(false); 
     editMainFrame1.setSize(300, 300); 

     JPanel orderNumberPanel = new JPanel(new GridLayout(1, 2)); 
     JPanel nameNumberPanel = new JPanel(new GridLayout(1, 2)); 
     JPanel quantityNumberPanel = new JPanel(new GridLayout(1, 2)); 
     JPanel priceNumberPanel = new JPanel(new GridLayout(1, 2)); 
     JPanel buttonNumberPanel = new JPanel(new GridLayout(1, 1)); 

     JLabel entOrderNumber = new JLabel("Select Order Number"); 

     Integer[] orderNumbersList = sc.getOrderNumbersList(); 
     JComboBox comOrderNumber = new JComboBox(orderNumbersList); 

     orderNumberPanel.add(entOrderNumber); 
     orderNumberPanel.add(comOrderNumber); 

     JLabel entName = new JLabel("Enter New Name"); 
     JTextField txtFieldName = new JTextField(); 
     txtFieldName.setSize(20, 20); 
     nameNumberPanel.add(entName); 
     nameNumberPanel.add(txtFieldName); 

     JLabel entQuantity = new JLabel("Enter New Quantity"); 
     JTextField txtFieldQuantity = new JTextField(); 
     txtFieldQuantity.setSize(20, 20); 
     quantityNumberPanel.add(entQuantity); 
     quantityNumberPanel.add(txtFieldQuantity); 

     JLabel entPrice = new JLabel("Enter New Price"); 
     JTextField txtFieldPrice = new JTextField(); 
     txtFieldPrice.setSize(20, 20); 
     priceNumberPanel.add(entPrice); 
     priceNumberPanel.add(txtFieldPrice); 

     JButton buttonEdit = new JButton("Edit!"); 
     buttonNumberPanel.add(buttonEdit); 

     // adding components to separate panels 

     editMainFrame1.add(orderNumberPanel); 
     editMainFrame1.add(nameNumberPanel); 
     editMainFrame1.add(quantityNumberPanel); 
     editMainFrame1.add(priceNumberPanel); 
     editMainFrame1.add(buttonNumberPanel); 
    } 

    private void addActionListeners() { 
     buttonEdit.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 

       OrderItem x = sc.findItem(Integer.parseInt((String) comOrderNumber.getSelectedItem())) ; 
       sc.removeItem(x); 

       String newNameEntered = txtFieldName.getText(); 

       int newQuantityEntered = Integer.parseInt((String) txtFieldQuantity.getText()); 

       double newPriceEntered = Double.parseDouble((String) txtFieldPrice.getText()); 

       int z = Integer.parseInt((String) comOrderNumber.getSelectedItem()) ; 

       System.out.println(""+newQuantityEntered+newNameEntered); 


       sc.addItem(z,newNameEntered,newQuantityEntered,newPriceEntered); 

       orderTextField.setText("3" + sc.getBasketContents()); 
       numItemsField.setText(""+sc.getSize()); 
       totalCostField.setText(""+sc.getTotalPrice()); 




      } 
     }); 
    } 
} 

Lines giving the errors :  buttonEdit.addActionListener(new ActionListener() { 
Line 95 
     addActionListeners(); Line 39 
       EditItem editFrame = new EditItem(sc, orderTextField, numofItemsField, totalCostField); 
Line 252. 

을 나는 아래 점점 계속 오류 :

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
    at Assesment.EditItem.addActionListeners(EditItem.java:95) 
    at Assesment.EditItem.<init>(EditItem.java:39) 
    at Assesment.Store$3.actionPerformed(Store.java:252) 
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2028) 
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2351) 
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) 
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) 
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236) 
    at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:272) 
    at java.awt.Component.processMouseEvent(Component.java:6382) 
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3275) 
    at java.awt.Component.processEvent(Component.java:6147) 
    at java.awt.Container.processEvent(Container.java:2083) 
    at java.awt.Component.dispatchEventImpl(Component.java:4744) 
    at java.awt.Container.dispatchEventImpl(Container.java:2141) 
    at java.awt.Component.dispatchEvent(Component.java:4572) 
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4619) 
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4280) 
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4210) 
    at java.awt.Container.dispatchEventImpl(Container.java:2127) 
    at java.awt.Window.dispatchEventImpl(Window.java:2489) 
    at java.awt.Component.dispatchEvent(Component.java:4572) 
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:710) 
    at java.awt.EventQueue.access$400(EventQueue.java:82) 
    at java.awt.EventQueue$2.run(EventQueue.java:669) 
    at java.awt.EventQueue$2.run(EventQueue.java:667) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) 
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98) 
    at java.awt.EventQueue$3.run(EventQueue.java:683) 
    at java.awt.EventQueue$3.run(EventQueue.java:681) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) 
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:680) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:296) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:211) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:201) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:196) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:188) 
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:122) 

그게 나를 미친 beacuse 운전 다른 행동 Listerners있어 b 전자 같은 방식으로 작동하지 것은 나에게 오류를 던지는

+0

95 번 라인의 Assesment 클래스에는 어떤 현상이 발생합니까? –

+0

'comOrderNumber'클래스 멤버에 값을 할당하지 않았습니다. 대신 build() 메소드에 새 로컬 변수 'comOrderNumber'를 작성하고 값을 할당했습니다. 그래서, 그것은 actionPerformed() 메소드에서 널 포인터 예외를 던집니다. 거의 모든 인스턴스 변수를 섀도 잉했습니다. – Keerthivasan

+0

하나의 문제를 제거한 것처럼 보였습니다. 그러나 지금은 라인에서 오류가 발생했습니다. \t \t \t \t int p = Integer.parseInt (String) comOrderNumber.getSelectedItem()); – user2882181

답변

1

당신은

JButton buttonEdit = new JButton("Edit!"); 

그것은

buttonEdit = new JButton("Edit!"); 

는 개인 필드를 초기화 안합니까?

1
JButton buttonEdit = new JButton("Edit!"); 

가되어야한다

buttonEdit = new JButton("Edit!"); 

JButton 접두사를 추가함으로써, 효과적으로 지역 변수가된다 '그림자'진짜 하나, 그 어떤 항상 null입니다. build() 방법에서

0
buttonEdit.addActionListener(new ActionListener() { 

buttonEdit이 null이므로 아무 메소드도 사용할 수 없습니다. 이 그림을보십시오 (Eclipse에서 디버깅 됨) : https://dl.dropboxusercontent.com/u/1987930/screenshot.png Why?

왜?

JButton buttonEdit = new JButton("Edit!"); //You set a local varaiable, not to class, so 
// remove first word 
+2

코드 사진이 아니라 코드를 게시하십시오. – trashgod

관련 문제