[英]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.