繁体   English   中英

将用户输入从一个 class 传递到 java 中的另一个?

[英]Pass user input from one class to another in java?

我正在创建一个简单的聊天应用程序,用户需要登录,然后它连接到 mysql 表,该表根据现有记录检查用户名和密码。 它检索用户名结果集并将其传递到一个字符串中,然后从该字符串中对其进行检查。 我希望服务器 class 访问输入,以便可以使用用户名将消息存储到数据库中。 然后,服务器通过Runtime.getRuntime().exec()打开充当聊天室的命令提示符 window。 我试过吸气剂,但 java 告诉我字符串是 null。 这是我的客户 class 我已经声明了我的变量:

public class Client {
    static final String url = "jdbc path to database";
    static final String user = "myuser";
    static final String passwd = "mypassword";
    final static int ServerPort = 5000;
    static String serverAddress;
    static Scanner in;
    static PrintWriter out;
    static Scanner scan = new Scanner(System.in);
    static boolean menuloop = true;
    public static String usern;

    static int choice, choice0, choice1;

    public Client(String serverAddress) {
        this.serverAddress = serverAddress;
    }

那么这是整个Client的class方法:

public static void login() {
    boolean validate = false;
    do {
        try {
            validate = true;
            Class.forName("com.mysql.cj.jdbc.Driver");
            Connection conn = DriverManager.getConnection(url, user, passwd);
            System.out.println("Connection established");
            Scanner s = new Scanner(System.in);
            System.out.println("Enter username");
            String username = "";
            usern = s.nextLine();
            System.out.println("Enter password");
            String password = "";
            String pass = s.nextLine();
            Statement stmt = conn.createStatement();
            String SQL = "SELECT username,password FROM mytable WHERE username='" + usern + "' && password='" + pass + "'";

            ResultSet rs = stmt.executeQuery(SQL);

            while (rs.next()) {
                username = rs.getString("username");
                password = rs.getString("password");
            }

            if (usern.equals(username) && pass.equals(password)) {
                System.out.println("Successful Login!\n----");
            } else {
                System.out.println("Incorrect Username or Password\n----");
                validate = false;
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    } while (!validate);
}

我试过getter方法

    public static String getusername(){return username;}

然后在另一个 class 作为 Client.getusername() 调用该方法后,Java 告诉我字符串是 null。 我的代码中有两个用户名。 其中之一称为usern usern接受用户输入,而username用于从数据库中检索实际的用户名。 如果用户输入与检索到的username匹配,则登录成功。 正如您在我的代码中看到的那样,我已将usern声明为全局变量,它是public static String usern; . 使用常见的 Java 数据结构(例如列表和集合)不起作用。 有人可以帮帮我吗? 我想避免每次用户打开聊天 window 时再次询问用户名。 我在 Java 方面没有经验,所以请 go 容易。

我想您在使用 static 时遇到问题。 客户端 class 必须首先实例化,然后才能调用其方法。 但是 login() 和 getusername() 都是 static 并且可以在没有实例化客户端的情况下调用它们

Client.login()

这对构造函数 Client() 毫无意义。 以下代码向您展示了它是如何工作的:

    import java.util.Scanner;
    import java.io.PrintWriter;
    public class Client {
    static final String url = "jdbc path to database";
    static final String user = "myuser";
    static final String passwd = "mypassword";
    final static int ServerPort = 5000;
    static String serverAddress;
    static Scanner in;
    static PrintWriter out;
    static Scanner scan = new Scanner(System.in);
    static boolean menuloop = true;
    public static String usern;

    static int choice, choice0, choice1;

    public Client(String serverAddress) {
        this.serverAddress = serverAddress;
    }
    public static void login() {
    boolean validate = false;
    do {
        try {
            Scanner s = new Scanner(System.in);
            System.out.println("Enter username");
            String username = "Joe";
            usern = s.nextLine();
            System.out.println("Enter password");
            String password = "Joe";
            String pass = s.nextLine();
            
            if (usern.equals(username) && pass.equals(password)) {
              validate = true;
                System.out.println("Successful Login!\n----");
            } else {
                System.out.println("Incorrect Username or Password\n----");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    } while (!validate);
  }
  public static String getusername(){
     return usern;
  }
  public static void main(String... argv) {
     Client c = new Client("hello");
     c.login();
     System.out.println(c.getusername());
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM