2013-11-15 76 views
0

我在按下java中的按鈕重置時出錯。更新:我已經在設計視圖的LoginForm.java中創建了一個JTextField和JPasswordField,它是textField1和passwordField1,事情是我想在ResetField.java中訪問它。Java中的ResetField

這裏是我的代碼:

public class ResetField 
{ 
    JTextField textField1; 
    JPasswordField passwordField1; 

    public void ResetAction() 
    { 
     textField1.setText(""); 
     passwordField1.setText(""); 
    } 
} 

private void button2ActionPerformed(java.awt.event.ActionEvent evt) {           
     _resetField.ResetAction(); 
    } 

以下是錯誤的文字:

在 inspection.management異常在線程 「AWT-EventQueue的-0」 顯示java.lang.NullPointerException 。 system.ResetField.ResetAction(ResetField.java:17) at inspection.management.system.LoginForm.button2ActionPerformed(LoginForm.java:170) at inspection.man agement.system.LoginForm.access $ 100(LoginForm.java:10) 在 inspection.management.system.LoginForm $ 2.actionPerformed(LoginForm.java:73) 在 javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java: 2018) 在 javax.swing.AbstractButton中的$ Handler.actionPerformed(AbstractButton.java:2341) 在 javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) 在 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)在 javax.swing.JComponent.processMouseEvent(JComponent.java:3320)處 java.awt.Container.processEvent java.awt.Component.processEvent(Component.java:6270)(容器。的java:2229)在 java.awt.Component.dispatchEventImpl(Component.java:4861)在 java.awt.Container.dispatchEventImpl(Container.java:2287)在 java.awt.Component.dispatchEvent(Component.java: 4687)在 java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) 在 java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492) 在java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422 ) at java.awt.Container.dispatchEventImpl(Containe r.java:2273)at java.awt.Window.dispatchEventImpl(Window.java:2719)at java.awt.Component.dispatchEvent(Component.java:4687)at java.awt.EventQueue.dispatchEventImpl(EventQueue。 (EventQueue.java:103)at java.awt.EventQueue $ 3.run的.java:692)在 java.security.AccessController.doPrivileged(本機方法)在 java.security.ProtectionDomain $ 1.doIntersectionPrivilege(ProtectionDomain.java:76) 在 java.security.ProtectionDomain $ 1.doIntersectionPrivilege(ProtectionDomain.java :87) at java.awt.EventQueue $ 4.run(EventQueue.java:708)at java.awt.EventQueue $ 4.run(EventQueue.java:706)at java.security.AccessController.doPrivileged(Native Method)at java.security.ProtectionDomain $ 1.doIntersectionPrivilege(ProtectionDomain.java:76) at java。 awt.EventQueue.dispatchEvent(EventQueue.java:705)at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread。的java:161) 在 java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150) 在 java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) 在 java.awt.EventDispatchThread.pumpEvents(EventDispatchThread的.java:138) 在java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

+1

無法閱讀。您能否將錯誤的前幾行作爲文本加入? – 2013-11-15 15:51:17

+0

複製並粘貼錯誤,該圖像太難閱讀。 – turbo

+0

你現在可以刪除圖像;) – MariuszS

回答

1

你只是創建參考而不是創建對象。 passwordField1是參考而非對象。類似textField1是參考而非對象。 創建一個這樣的對象JTextField textField1=new JTextField();

public class ResetField { JTextField textField1; JPasswordField passwordField1;

public void ResetAction() 
{ 
    textField1=new JTextField(); 
    passwordField1=new JPasswordField(); 
    textField1.setText(""); 
    passwordField1.setText(""); 
} 
} 

private void button2ActionPerformed(java.awt.event.ActionEvent evt) {           
     _resetField.ResetAction(); 
    } 
+0

Hai,我已經在設計視圖中創建了JTextField,但我想在另一個類中訪問它。假設我在LoginForm.java中創建了一個JTextField作爲textField1,但是我想訪問ResetField.java中的textField1。 JTextField是公開的 – Kaoru

+0

@Kaoru嘗試使用我的更新代碼,並讓我知道它是否有效 – 2013-11-15 15:58:11

+0

不,它不能運行先生 – Kaoru

0

在異常線程 「AWT-EventQueue的-0」 顯示java.lang.NullPointerException 在 inspection.management.system.ResetField.ResetAction(ResetField.java:17)

爲什麼您使用_resetFieldresetAction

private void button2ActionPerformed(java.awt.event.ActionEvent evt) { 
    ResetAction();// Remove _resetField. 
} 

你也需要啓動以下領域。

JTextField textField1=new JTextField(); 
JPasswordField passwordField1=new JPasswordField(); 
1

你必須實例化你的對象。現在,textField1passwordField1只是空引用。取而代之的是:

JTextField textField1; 
JPasswordField passwordField1; 

你需要這樣的:

JTextField textField1 = new JTextField(); 
JPasswordField passwordField1 = new JPasswordField(); 
+0

Hai,我已經在設計視圖中創建了JTextField,但我想在另一個類中訪問它。假設我在LoginForm.java中創建了一個JTextField作爲textField1,但是我想訪問ResetField.java中的textField1。 JTextField是公開的 – Kaoru

+0

更好的是有一個評論(並不重複所有答案),更好的是有一個領域(在許多類中不重複):) – MariuszS

0

你不明白變量是如何工作的。 textField1和passwordField1在你的類中聲明。這意味着他們只能從你的班級內部進行訪問。即使它們是公開的,你仍然需要一個包含類的實例來引用它們。

您在多個類中創建了textField1和passwordField1,但這並不會使它們相同。如果您希望能夠從另一個類的GUI中引用確切的JTextField和JPasswordField,則必須將引用傳遞給它。

public class ResetField 
{ 
    JTextField textField1; 
    JPasswordField passwordField1; 

    public void ResetAction(JTextFile textField, JPasswordFiled passwordField) 
    { 
     textField1 = textField; 
     passwordField1 = passwordField; 
     textField1.setText(""); 
     passwordField1.setText(""); 
    } 
} 

這就是說,你不需要一個新類來重置構造函數中的這些字段。您應該在包含您的字段的類中創建一個方法,並在那裏重置它們。