首页 > 解决方案 > JavaFX用户界面和客户端-服务器-应用程序的结合;将客户端连接到服务器以及许多其他问题

问题描述

  1. 问题:客户端不再连接到服务器。
  2. 我需要 UI 的不同对象,它们在我的主应用程序类的 start-Method 中初始化。我如何将它们传递给主?

完整背景:我对整个应用程序的目标是创建一个多人可以玩的小游戏。这将非常简单,只需几个按钮和标签,最后还应该有一种让玩家互动的方式。我还希望通过服务器访问这个游戏,每个玩家都有一个帐户,由用户名和密码组成。由于我是 Java 编程的新手,我知道这 - 目前 - 完全超出了我的范围。但我正在一点一点地学习我需要的一切才能到达那里。

重要的部分:我设法用 UI 在本地连接服务器和客户端,但无法让我的程序创建帐户,这些帐户应该存储在我的“AccountDatabase”中。这导致没有人能够成功“登录”(这里通过显示消息“登录成功!”来模拟登录)试图解决这个问题,发现我需要使用线程来为多个客户端和重写我的代码几乎完全。现在我什至无法将客户端连接到服务器......我尝试了很多东西并重写了很多代码,以至于我不知道出了什么问题了。如果有人可以看看我可能超级混乱的代码,看看我需要在这里做什么,我将非常感激。

我的主要课程的代码:

公共类主要扩展应用程序{

@Override
public void start(Stage primaryStage) {
    LoginUI loginUI = new LoginUI(primaryStage);
    loginUI.setScene(primaryStage, loginUI.getScene());
    primaryStage.show();
}

public static void main(String[] args) {
    launch(args);
    InetAddress ip = null;
    try {
        ip = InetAddress.getByName("localhost");
    } catch (UnknownHostException e) {
        e.printStackTrace();
    }
    Client client = new Client(ip, 9376);
    loginUI.getSignUpUI().setSignUpButtonAction(client);
    //how do I get the instance of LoginUI instantiated in the start-Method?
}

}

预期结果:客户端连接到服务器,UI (LoginUI) 显示带有重定向到 (SignUpUI) 的超链接。这个场景应该让用户输入用户名和密码,检查“AccountDataBase”是否已经存在具有该用户名的帐户,如果可能,最后创建帐户。回到(LoginUI),用户还应该能够输入用户名和密码,将其与我的“AccountDataBase”中的 Account-Data 进行比较,然后让用户登录。

实际结果:重写代码以使用线程后,客户端将无法连接到服务器。我得到的最远的是建立连接,但未能创建新帐户,因为用户输入的 Account-Date 可能没有存储在 AccountDataBase ...

如果您已经做到了这一步,您可能需要查看我编写的其他类的代码。我只是没有发布它们,因为 Stackoverflow 告诉我不要发布整个文件......如果您需要更多代码,请随时告诉我!

标签: javajavafxclient-server

解决方案


像这样

public class Main extends Application {
    LoginUI loginUI
@Override
public void start(Stage primaryStage) {
    loginUI = new LoginUI(primaryStage);
    loginUI.setScene(primaryStage, loginUI.getScene());
    primaryStage.show();
}

public static void main(String[] args) {
    launch(args);
InetAddress ip = null;
try {
    ip = InetAddress.getByName("localhost");
} catch (UnknownHostException e) {
    e.printStackTrace();
}
Client client = new Client(ip, 9376);
loginUI.getSignUpUI().setSignUpButtonAction(client);
//how do I get the instance of LoginUI instantiated in the start-Method?
}
}

推荐阅读