2013-11-15 38 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(""); 
    } 
} 

这就是说,你不需要一个新类来重置构造函数中的这些字段。您应该在包含您的字段的类中创建一个方法,并在那里重置它们。