Java 使用.getText()从文本字段获取文本时出现问题

Java 使用.getText()从文本字段获取文本时出现问题,java,swing,amazon-web-services,amazon-s3,Java,Swing,Amazon Web Services,Amazon S3,我正在构建一个应用程序,用于验证来自Amazon Web服务s3文件的登录, 它可以验证登录是否正确,但当我试图获取用户在文本字段中输入的文本时,问题就出现了 这是构建UI的代码部分: public class UserInterface extends JFrame implements ActionListener { JLayeredPane pane; JFrame f; JTextField usernameLogin; JTextField passwordLogin; UserI

我正在构建一个应用程序,用于验证来自Amazon Web服务s3文件的登录, 它可以验证登录是否正确,但当我试图获取用户在文本字段中输入的文本时,问题就出现了

这是构建UI的代码部分:

public class UserInterface extends JFrame implements ActionListener {

JLayeredPane pane;
JFrame f;
JTextField usernameLogin;
JTextField passwordLogin;
UserInterface ui;
JButton loginButton;
static String loggedInAs = null;
static AmazonS3       s3;
static boolean tryToLogin = false;


public UserInterface() {

    JLayeredPane pane = new JLayeredPane();

    JTextField usernameLogin = new JTextField("Username...",20);
    usernameLogin.setLocation(650,200);
    usernameLogin.setSize(500, 30);
    usernameLogin.setVisible(true);
    pane.add(usernameLogin, 1, 0);

    JTextField passwordLogin = new JTextField("Password...",20);
    passwordLogin.setLocation(650,240);
    passwordLogin.setSize(500, 30);
    passwordLogin.setVisible(true);
    pane.add(passwordLogin, 1, 0);

    JButton loginButton = new JButton("login");
    loginButton.setLocation(650,290);
    loginButton.setSize(75, 20);
    loginButton.addActionListener(this);
    loginButton.setVisible(true);
    pane.add(loginButton, 1, 0);


    this.add(pane);

}
我不认为问题来自那里,但我可能错了。 该程序的下一部分是一个逻辑处理器,它与服务器一起使用AmazonS3验证登录。它在main()中

当我调用“ui.usernameLogin.getText()”或“ui.passwordLogin.getText()”时,总是会出现空指针异常

具体来说,

java.lang.NullPointerException
at UserInterface.main(UserInterface.java:102)

您正在构造函数中定义一个局部变量

JTextField usernameLogin=newjtextfield(“用户名…”,20)

这与
JTextField usernameLogin不同声明这永远不会初始化,并且是
null
,这就是为什么会出现
NullPointerException

改变这个

public class UserInterface extends JFrame implements ActionListener {
  JLayeredPane pane;
  JFrame f;
  JTextField usernameLogin;
  JTextField passwordLogin;
  UserInterface ui;
  JButton loginButton;   


  public UserInterface() {
    LayeredPane pane = new JLayeredPane();

    JTextField usernameLogin = new JTextField("Username...",20);
    usernameLogin.setLocation(650,200);
    usernameLogin.setSize(500, 30);
    usernameLogin.setVisible(true);
    pane.add(usernameLogin, 1, 0);

    JTextField passwordLogin = new JTextField("Password...",20);
    passwordLogin.setLocation(650,240);
    passwordLogin.setSize(500, 30);
    passwordLogin.setVisible(true);
    pane.add(passwordLogin, 1, 0);

    JButton loginButton = new JButton("login");
    loginButton.setLocation(650,290);
    loginButton.setSize(75, 20);
    loginButton.addActionListener(this);
    loginButton.setVisible(true);
    pane.add(loginButton, 1, 0);


    this.add(pane);
}

几点建议:

不要扩展
JFrame
而是使用引用(组合优于继承),不要在顶级类
ActionListener
中实现,而是使用
匿名类
内部类

一些编码:

(retVal==true&&retVal2==true)
将其更改为
(retVal&&retVal2)

管理异常,从不空白捕获

} catch (AmazonServiceException ase) {

    } 

根据您提供的代码,您从未将对象分配给
ui
变量。此外,
usernameLogin
是在本地创建的,并且没有分配给类的成员变量

,这意味着您试图将空值传递到它不接受空值的地方。您需要做一些错误处理,以检查空值。还可以使用==运算符检查空值。.equals比较对象

    if(ui.username.getText() != null){
          boolean retVal = splitResult[0].equals(ui.usernameLogin.getText());
          boolean retVal2 = splitResult[1].equals(ui.passwordLogin.getText());
    }

如何使局部变量为静态?静态?你为什么希望它是静态的?据我所知,你可以从我代码中的任何地方访问静态的东西,我需要能够从main()访问textField@OP:我想你需要认真阅读实例和类成员,以及如何引用它们。您正在发布的代码中执行一些广泛的名称阴影。@user1952381我更新了hope-answer希望它对您有所帮助,如果有帮助,请不要忘记将某些答案标记为正确。如何将其分配给classes成员变量?谢谢,顺便问一下。你有没有用一个使用变量表的工具调试过它?找出哪个调用返回null非常有用。例如,您确定lineValue得到的值不是null吗?
} catch (AmazonServiceException ase) {

    } 
    if(ui.username.getText() != null){
          boolean retVal = splitResult[0].equals(ui.usernameLogin.getText());
          boolean retVal2 = splitResult[1].equals(ui.passwordLogin.getText());
    }