Java 为什么这个对象是空的?
我对Java相当陌生,我得到了一个“Java.lang.NullPointerException” 这两个文本字段都返回为null,我不知道为什么我使用了.setText(),它显示在文本字段中 基本上,我要做的是在velocityTextView中传递值并将其传递给 返回文本视图 我尝试了Java 为什么这个对象是空的?,java,object,null,Java,Object,Null,我对Java相当陌生,我得到了一个“Java.lang.NullPointerException” 这两个文本字段都返回为null,我不知道为什么我使用了.setText(),它显示在文本字段中 基本上,我要做的是在velocityTextView中传递值并将其传递给 返回文本视图 我尝试了returnTextView.setText(velocityTextView.getText()) 我将此代码放在actionPerformed()方法中 我被卡住了,我想得到一些指导 import jav
returnTextView.setText(velocityTextView.getText())代码>
我将此代码放在actionPerformed()
方法中
我被卡住了,我想得到一些指导
import java.awt.Color;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class kinematica implements ActionListener {
public JPanel totalGui;
public JLabel progTitle;
public JButton enterBtn;
public JTextField velocityTextField, returnTextField;
public static void main(String[] args) {
showGui();
}
public JPanel createContentPane() {
// GUI panel to contain the elements that make GUI
JPanel totalGui = new JPanel();
totalGui.setLayout(null);
// Title Label
JLabel progTitle = new JLabel("Linear Motion 1D");
progTitle.setLocation(10, 10);
progTitle.setSize(500, 30);
progTitle.setHorizontalAlignment(JLabel.LEFT);
totalGui.add(progTitle);
// Buttons
JButton enterBtn = new JButton("Enter");
enterBtn.setLocation(100, 200);
enterBtn.setSize(100, 50);
enterBtn.addActionListener(this);
totalGui.add(enterBtn);
// text fields
JTextField velocityTextField = new JTextField(20);
velocityTextField.setLocation(100, 50);
velocityTextField.setSize(80, 30);
velocityTextField.setText("Velocity =");
totalGui.add(velocityTextField);
JTextField returnTextField = new JTextField();
returnTextField.setLocation(100, 100);
returnTextField.setSize(80, 30);
returnTextField.setText("test1");
totalGui.add(returnTextField);
totalGui.setOpaque(true);
return totalGui;
}
public void actionPerformed(ActionEvent e) {
returnTextField.getText();
System.out.println(velocityTextField);
}
public static void showGui() {
JFrame window = new JFrame("Kinematica");
kinematica demoWindow = new kinematica();
window.setContentPane(demoWindow.createContentPane());
window.setSize(1500, 1000);
window.setVisible(true);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
从createContentPane
函数中删除所有类名
当您说JLabel progTitle
时,您是在为函数创建一个局部变量,因此不是在谈论成员变量。这就造成了程序员的情况,这就造成了您的问题
因此,当您稍后访问成员变量时,该变量未被触及,因此null
改变
JTextField returnTextField = new JTextField();
到
在该函数的此行和类似行中。从createContentPane
函数中删除所有类名
当您说JLabel progTitle
时,您是在为函数创建一个局部变量,因此不是在谈论成员变量。这就造成了程序员的情况,这就造成了您的问题
因此,当您稍后访问成员变量时,该变量未被触及,因此null
改变
JTextField returnTextField = new JTextField();
到
在该函数的这行和类似行中。问题是,您正在隐藏变量。将这两个'JTextField'声明为实例字段
public JTextField velocityTextField, returnTextField;
public JPanel createContentPane() {
/*...*/
// text fields
JTextField velocityTextField = new JTextField(20);
/*...*/
JTextField returnTextField = new JTextField();
然后,在createContentPane
方法中重新声明它们
相反,请删除本地声明,例如
public JTextField velocityTextField, returnTextField;
public JPanel createContentPane() {
/*...*/
// text fields
velocityTextField = new JTextField(20);
/*...*/
returnTextField = new JTextField();
问题是,您正在隐藏您的变量。将这两个'JTextField'声明为实例字段
public JTextField velocityTextField, returnTextField;
public JPanel createContentPane() {
/*...*/
// text fields
JTextField velocityTextField = new JTextField(20);
/*...*/
JTextField returnTextField = new JTextField();
然后,在createContentPane
方法中重新声明它们
相反,请删除本地声明,例如
public JTextField velocityTextField, returnTextField;
public JPanel createContentPane() {
/*...*/
// text fields
velocityTextField = new JTextField(20);
/*...*/
returnTextField = new JTextField();
正如Karthik所说:
从createContentPane
中删除类名。这看起来像是:
public JPanel createContentPane() {
// GUI panel to contain the elements that make GUI
totalGui = new JPanel();
totalGui.setLayout(null);
// Title Label
progTitle = new JLabel("Linear Motion 1D");
progTitle.setLocation(10, 10);
progTitle.setSize(500, 30);
progTitle.setHorizontalAlignment(JLabel.LEFT);
totalGui.add(progTitle);
// Buttons
enterBtn = new JButton("Enter");
enterBtn.setLocation(100, 200);
enterBtn.setSize(100, 50);
enterBtn.addActionListener(this);
totalGui.add(enterBtn);
// text fields
velocityTextField = new JTextField(20);
velocityTextField.setLocation(100, 50);
velocityTextField.setSize(80, 30);
velocityTextField.setText("Velocity =");
totalGui.add(velocityTextField);
returnTextField = new JTextField();
returnTextField.setLocation(100, 100);
returnTextField.setSize(80, 30);
returnTextField.setText("test1");
totalGui.add(returnTextField);
totalGui.setOpaque(true);
return totalGui;
}
为什么要这样做?因为在方法中将类名放在变量名前面时,是在声明局部变量。相反,您希望使用已声明的公共字段。为了避免再次遇到这个问题,我建议对实例变量使用下划线,而对局部变量不使用下划线。因此,您可以使用\u enterBtn
而不是enterBtn
来检查自己的未来。正如Karthik所说:
从createContentPane
中删除类名。这看起来像是:
public JPanel createContentPane() {
// GUI panel to contain the elements that make GUI
totalGui = new JPanel();
totalGui.setLayout(null);
// Title Label
progTitle = new JLabel("Linear Motion 1D");
progTitle.setLocation(10, 10);
progTitle.setSize(500, 30);
progTitle.setHorizontalAlignment(JLabel.LEFT);
totalGui.add(progTitle);
// Buttons
enterBtn = new JButton("Enter");
enterBtn.setLocation(100, 200);
enterBtn.setSize(100, 50);
enterBtn.addActionListener(this);
totalGui.add(enterBtn);
// text fields
velocityTextField = new JTextField(20);
velocityTextField.setLocation(100, 50);
velocityTextField.setSize(80, 30);
velocityTextField.setText("Velocity =");
totalGui.add(velocityTextField);
returnTextField = new JTextField();
returnTextField.setLocation(100, 100);
returnTextField.setSize(80, 30);
returnTextField.setText("test1");
totalGui.add(returnTextField);
totalGui.setOpaque(true);
return totalGui;
}
为什么要这样做?因为在方法中将类名放在变量名前面时,是在声明局部变量。相反,您希望使用已声明的公共字段。为了避免再次遇到这个问题,我建议对实例变量使用下划线,而对局部变量不使用下划线。因此,您可以使用\u enterBtn
而不是enterBtn
来检查自己的未来。这非常有效,谢谢!我知道现在出了什么问题。刚接触java,有很好的学习经验。非常好,谢谢!我知道现在出了什么问题。刚接触java,有很好的学习经验。我完全明白这是怎么回事。从现在起,我肯定会使用下划线。我肯定会看到发生了什么。从现在起,我肯定会使用下划线。@karthikt可以随意将其添加到您的回答中。@karthikt可以随意将其添加到您的回答中。@karthikt可以随意将其添加到您的回答中。@karthikt可以在+1:+后2秒添加到您的回答中。)