下面是我正在编写的代码。基本上我需要一个盒子来打开,让用户在相应的文本字段中输入数据。一切都很好。当我从actionPerformed方法打印它时,一切都输出正确,但是当我从main调用gui.displayPersonInfo方法时,它将所有的值显示为null。在盒子打开之前,它首先执行displayPersonInfo方法,尽管我在之后调用了该方法。有人知道我的代码有什么问题吗?(输出如下)
package userInput;
import javax.swing.JFrame;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Person extends JFrame{
String Name;
String Address;
String PhoneNumHome;
String PhoneNumWork;
String email;
JLabel label, label2;
JTextField tf1, tf2, tf3, tf4, tf5, tf6, tf7, tf8;
JButton button;
public Person(){
setLayout(new FlowLayout());
label = new JLabel("Enter your name");
add(label);
tf1 = new JTextField(10);
add(tf1);
label = new JLabel("Enter your Address (street number + street name)");
add(label);
tf2 = new JTextField(10);
add(tf2);
label = new JLabel("Enter your city");
add(label);
tf3 = new JTextField(10);
add(tf3);
label = new JLabel("Enter your province");
add(label);
tf4 = new JTextField(10);
add(tf4);
label = new JLabel("Enter your postal code");
add(label);
tf5 = new JTextField(10);
add(tf5);
label = new JLabel("Enter your home phone number (306-xxx-xxx)");
add(label);
tf6 = new JTextField(10);
add(tf6);
label = new JLabel("Enter your work phone number (306-xxx-xxx)");
add(label);
tf7 = new JTextField(10);
add(tf7);
label = new JLabel("Enter your email (user@emailservice.xxx");
add(label);
tf8 = new JTextField(10);
add(tf8);
button = new JButton("Next");
add(button);
event e = new event();
button.addActionListener(e);
}
public class event implements ActionListener{
public void actionPerformed(ActionEvent e){
String address1, pnum, wnum, a;
try{
String word = tf1.getText();
Name = word;
System.out.println(Name);
Address = tf2.getText();
Address = Address + " " + tf3.getText();
Address = Address + " " + tf4.getText();
Address = Address + " " + tf5.getText();
address1 = Address;
System.out.println(Address);
PhoneNumHome = tf6.getText();
pnum = PhoneNumHome;
PhoneNumWork = tf7.getText();
wnum = PhoneNumWork;
email = tf8.getText();
a = email;
System.out.println(PhoneNumHome);
System.out.println(PhoneNumWork);
System.out.println(email);
saveInfo(word, address1, pnum, wnum, a);
displayPersonInfo();
System.exit(0);
}catch(Exception ex){}
}
}
public void displayPersonInfo(){
System.out.println("Name: " + Name);
System.out.println("Address: " + Address);
System.out.println("Home Phone Number: " + PhoneNumHome);
System.out.println("Work Phone Number: " + PhoneNumWork);
System.out.println("Email: " + email);
}
public void saveInfo(String name, String address, String Hphone, String Wphone, String Email){
Name = name;
Address = address;
PhoneNumHome = Hphone;
PhoneNumWork = Wphone;
email = Email;
}
public static void main(String[] args) {
Person gui = new Person();
gui.displayPersonInfo();
gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
gui.setTitle("Enter Information");
gui.setSize(350,330);
gui.setLocation(500,250);
gui.setVisible(true);
}
}
下面是输出:(它的作用就像displayPersonInfo首先出现一样)< br >运行:< br >名称:null
地址:null
家庭电话号码:null
工作电话号码:null
电子邮件:null
名称(现在它从actionPerformed中打印出来)地址城市省邮政编码< br >号码< br >另一个号码< br >电子邮件< br >名称:名称< br >地址:地址城市省邮政编码< br >家庭电话号码:号码
在main方法中,一开始就调用了“displayPERInfo()”方法。您将字符串名称声明为未初始化的字段,因此默认情况下它的值为null。您在事件类内的actionPerform()方法中初始化此变量。
问题是:
public void displayPersonInfo() {
System.out.println("Name: " + Name);
}
public static void main(String[] args) {
Person gui = new Person();
gui.displayPersonInfo();
}
只有在执行操作时,您才为变量赋予您想要的值,因此,如果您在此之前尝试访问该变量,您将会得到那里的默认值,即null。这正是你正在做的。当main方法启动时,它调用displayPersonInfo(),在该方法中,您试图访问变量名,但它返回null,因为在执行操作时,变量只接收您想要的值。
所以解决办法是:
public void displayPersonInfo() {
String word = tf1.getText();
Name = word;
System.out.println("Name: " + Name);
}
在调用变量之前,您必须给出您想要的值。这同样适用于其他变量。如果您将某些内容声明为“String Name;”并尝试调用它,您将收到null。
似乎您的<code>saveInfo</code>函数是多余的,因为您在调用它之前已经设置了每个值,但我不知道<code>saveInfo</code>为什么会将这些值置零。尝试在<code>saveInfo</code>之前调用<code>displayPersonInfo</code>并查看发生了什么。
我有一个已经预先输入值的hashmap,并且我正在从用户那里获取更多的值。然后按升序对这些值进行排序。但是在这段代码中,用户输入的值不会插入到HashMap中。 我创建了一个名为adduser()的方法,我调用它来添加新值。但它不能输入数据。我该怎么解决这个?
问题内容: 一直试图将我的房屋,房屋的年数和大小添加到GUI(更确切地说是JTextarea)中。最简单的方法是什么?尚未完全掌握数据输入。 问题答案: 有一个简单的方法,应该可以轻松附加结果 例如… 看看如何使用文本区域实现更多细节
我正在制作一个简单的石头剪刀程序,但不确定如何确保用户只输入有效的选项。如果他们不键入“石头”、“纸”或“剪刀”(大写不重要)等变量,然后再键入“是”或“否”,我需要能够对他们进行谴责。建议? }
问题内容: 我有一个线程类“ MyThread”和主应用程序,简称为“ Gui”。我想从线程类创建一些对象,但在本示例中,我仅创建了一个对象。线程类完成一些工作,然后向Gui类发出信号,指示需要用户输入(此指示目前仅是更改按钮的文本)。然后,线程应等待用户输入(在这种情况下为单击按钮),然后继续执行其操作… 如何在(多个)线程中等待用户输入? 问题答案: 默认情况下,具有事件循环,可以处理信号和插
让我明确一点--我试图使用Twilio STUDIO来实现这一点--而不是编码。我有一个完整的IVR构建和工作,但我不知道如何保存呼叫者输入的选择(DTMF)。是否有一个简单的插件或addon可以节省用户输入?
问题内容: 我正在尝试创建一个基本菜单,以检查输入的变量是否与定义的变量匹配。如果定义了变量,则获取已定义变量的数据。 例。 我输入 应该相等 问题答案: 这似乎是您要找的东西: 但是,这可能不是最好的策略,因为错字或恶意用户很容易使您的代码崩溃,系统过载或执行他们喜欢的任何其他讨厌的事情。对于这种特殊情况,更好的方法可能是