2016-01-21 74 views
-1

我必须为大学写一个聊天应用程序作为一个项目,不幸的是,我迷失在某处(btw。我是java编程的noob,所以提前对不起):javafx和数组列表

我正在读取一个文件(Data.txt),并将所有的字符串放在两个数组列表中(我的User类的静态块)。然后,在同一个类(用户类),我有一个方法(checkUser),它控制登录的输入(所以数组列表的内容),但不幸的是它总是给我一个错误(只是一个系统.out.put我创建,以检查它是否有效),我没有看到原因..我试图找出自己几个小时了,但它不会工作,这就是为什么IM问你在Java的专业人士...正如我前面提到的,我是一个noob在Java ..!这里有我的课:

主要类

package chatapplication; 

public class Main extends Application { 

private TextField tf = new TextField(); 
private PasswordField pf = new PasswordField();; 
private Text textU = new Text("Username:"); 
private Text textP = new Text("Password:"); 
private Button login = new Button("Login"); 
private Button quit = new Button("Quit"); 
private Text register = new Text("Not registered yet?"); 
private Hyperlink hl = new Hyperlink("Chlick here!"); 

public static void main(String[] args) { 
    launch(args); 
} 

@Override 
public void start(Stage primaryStage) throws Exception { 
    User<String> user = new User<String>(); 
    Login log = new Login(); 
    log.addNode(textU, 0, 0); 
    log.addNode(textP, 0, 1); 
    log.addNode(tf, 1, 0); 
    log.addNode(pf, 1, 1); 
    log.addNode(login, 0, 2); 
    log.addNode(quit, 1, 2); 
    log.addNode(register, 0, 3); 
    log.addNode(hl, 1, 3); 
    user.printArrayList(); 

    login.setOnAction((ae) -> { 
     if ((user.checkUser(tf.getText(), pf.getText()) == 1)) { 
      System.out.println("Thanks " + tf.getText()); 
     } else 
      System.out.println("Wrong inputs, try again!"); 
    }); 

    hl.setOnAction((ae) -> { 
     Register reg = new Register(); 
     try { 
      reg.registerNow(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

    }); 

    quit.setOnAction((ae) -> { 
     user.copyFile(); 
     user.closeFile(); 
     System.exit(1); 
    }); 

} 

} 

User类

package chatapplication; 

public class User<T> { 

private static int u = 0; 
private static int p = 0; 
private static ArrayList<String> userList = new ArrayList<String>(); 
private static ArrayList<String> passwordList = new ArrayList<String>(); 
private static FileReader fr; 
private static Scanner scanner; 
private static Formatter fm; 
private static File file; 

static { 
    try { 
     fm = new Formatter("newData.txt"); 
     file = new File("newData.txt"); 
     fr = new FileReader("Data.txt"); 
     scanner = new Scanner(fr); 
     while (scanner.hasNextLine()) { 
      userList.add(u++, scanner.nextLine()); 
      passwordList.add(p++, scanner.nextLine()); 
     } 
     System.out.println("\n" + userList.get(0) + "\n" + passwordList.get(0) + "\n"); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } 
} 

public int checkUser(T username, T password) { 
    for (int c = 0; c < userList.size(); c++) { 
     if (userList.get(c) == username && passwordList.get(c) == password) { 
      return 1; 
     } 
    } 
    return 0; 
} 

public void addUser(String user, String password) { 
    userList.add(u++, user); 
    passwordList.add(p++, password); 
} 

public void closeFile() { 
    fm.close(); 
} 

public void copyFile() { 
    for (int c = 0; c < userList.size(); c++) { 
     fm.format("%s\n", userList.get(c)); 
     fm.format("%s\n", passwordList.get(c)); 
    } 
    file.renameTo(new File("Data.txt")); 
} 

public void printArrayList() { 
    for (int c = 0; c < userList.size(); c++) { 
     System.out.println(userList.get(c)); 
     System.out.println(passwordList.get(c)); 
    } 
} 

预先感谢您的答案(S)! BR!

+0

确切位置在哪里,你得到的错误是什么呢?请更新您的问题。 – hotzst

回答

0

以下行可能是您的问题:

userList.get(c) == username && passwordList.get(c) == password) 

不要使用==比较String S,使用equals()方法。

参见:How do I compare strings in Java?

+0

太棒了,它的工作原理! :)我只是不得不将数据更改为字符串以及方法,与泛型它不会工作。谢谢盖尔 –