(注意,我在java中的新手)
我在解决javafx场景和类之间传递对象的问题上有点困难。
例如,我有类,它等待服务器的数据;主类和2个javafx窗口。 让它看起来像这样:
Listener.java。
让它在另一个线程上工作。当我们得到" nelo "从服务器,然后它意味着,用户没有记录它,然后,我们应该打开Login Window
// some package
// some imports
public class Listener extends Thread {
public void run() {
System.out.println("[INF] Wait for server...");
while(true) {
handle();
}
}
public void handle()
{
try {
byte[] token = new byte[6];
DataInputStream src = new DataInputStream(in);
src.read(token);
String token_val = new String(token);
switch (token_val) {
case "_nelo_":
System.out.println("[INF] Auth required");
break;
}
} catch (IOException e) {
}
}
}
好的,没有什么奇怪的。只是简单的听力课程。 但是我的麻烦开始了。我试着解释一下。 (先生,抱歉英语不好,我还是学这门语言)
让我们创建登录窗口(想象一下fxml文件和控制器创建:)):
// some package
// some imports
public class WindowLogin extends Application{
private Stage stage;
@Override
public void start(Stage primaryStage) throws Exception {
stage = new Stage();
try {
URL location = getClass().getResource("../views/WindowLogin.fxml");
FXMLLoader fxmlLoader = new FXMLLoader();
fxmlLoader.setLocation(location);
fxmlLoader.setBuilderFactory(new JavaFXBuilderFactory());
Parent root = (Parent) fxmlLoader.load(location.openStream());
Scene scene = new Scene(root);
stage.setScene(scene);
stage.show();
} catch (IOException e) {
e.printStackTrace();
}
}
public void show(){
launch();
}
}
因此,当用户打开应用程序时,客户端将尝试连接到服务器。 如果连接成功,则服务器请求客户端进行身份验证(显示登录窗口)。接下来 - 用户输入登录并通过并单击"登录"按钮。 (登录窗口显示过程的一些指示)。如果auth成功 - 隐藏登录,否则 - 在窗口中显示一些信息。
因此,我需要从Listener
访问Login window Controller
。也就是我之前写的 - 来自服务器的不同答案 - 显示了不同的元素。
我如何才能实现对LoginWindowController
的访问?
提前致谢
答案 0 :(得分:1)
我会为每项任务提供基本指导:
<强>连接强>
如果与服务器的连接成功,则:
Platform.runLater(new Runnable() {
public void run() {
try {
WindowLogin login = new WindowLogin();
login.start(new Stage());
} catch (Exception e) {
e.printStackTrace();
}
}
});
错误
您在WindowController上设置了blank
标签,并且用户是否认证,而不是填写此标签。
成功登录
您可以使用与之前使用的相同的Platform.runLater
,或者您可以使用stackpane并更改它的顺序(我强烈建议您使用Platform.runLater)。