JavaFX聊天应用程序

JavaFX聊天应用程序,javafx,chat,Javafx,Chat,我正在尝试建立一个聊天程序。当我使用javaawt包时,我可以做到这一点,但使用javafx时,我似乎有点困惑。第一次构建javafx项目时所有方法,甚至公共静态void main(字符串args[])在那里,有一个地方你可以开始编码的初级阶段。我对我的程序的视觉部分编码没有问题,只是我不知道我应该在哪里设置我程序的网络部分,以及我完成后将它放在哪里 **CODE: This is Just a View** 服务器扩展应用程序{ public void start(Stage primary

我正在尝试建立一个聊天程序。当我使用
javaawt
包时,我可以做到这一点,但使用
javafx
时,我似乎有点困惑。第一次构建
javafx项目时
所有方法,甚至
公共静态void main(字符串args[])
在那里,有一个地方你可以开始编码的
初级阶段
。我对我的程序的视觉部分编码没有问题,只是我不知道我应该在哪里设置我程序的
网络
部分,以及我完成后将它放在哪里

**CODE: This is Just a View**
服务器扩展应用程序{

public void start(Stage primaryStage){
//Where you setup the visual of your program
}

public static void main(String args[]){
launch(args); // Where the program will run
}

public void ServerConnection(){
//where i put the codes to setup my streams and SOCKET
}
ServerConnection方法还包含其他
方法
,但所有这些方法都将转到ServerConnectionMethod。现在我的问题是,我将把ServerConnection方法放在哪里,以便它与My
初级阶段一起运行


很抱歉写了这么长的帖子。请使用
String=“potato”

如果JavaFX应用程序正确启动,它将根本不会使用
main()
方法-您可以临时删除它(作为一个实验)并检查,但除了向后兼容性之外,它可能没有任何用途。对于FX应用程序,您当然不应该依赖main方法来执行任何特殊操作;它应该只调用
launch()
,而不调用其他任何功能


相反,您的主类应该扩展
应用程序
,JavaFX运行时将为您创建一个实例,创建一个主阶段,并调用start方法,为您提供对该阶段的引用。通过该方法,您可以做任何您想做的事情,但请记住它位于UI线程上(因此,您应该为任何长时间运行的任务创建一个附加线程,就像在任何其他工具包(如Swing)中一样。)

如果JavaFX应用程序正确启动,它将根本不会使用
main()
方法-您可以临时删除它(作为一个实验)并检查,但除了向后兼容性之外,它可能没有任何用途。对于FX应用程序,您当然不应该依赖main方法来执行任何特殊操作;它应该只调用
launch()
,而不调用其他任何功能


相反,您的主类应该扩展
应用程序
,JavaFX运行时将为您创建一个实例,创建一个主阶段,并调用start方法,为您提供对该阶段的引用。通过该方法,您可以做任何您想做的事情,但请记住它位于UI线程上(因此,您应该为任何长时间运行的任务创建一个附加线程,就像在任何其他工具包(如Swing)中一样。)

您可以在开始时运行此setupConnection方法(Stage primaryStage)方法。这样,它将在显示阶段之前执行。您也可以从main方法运行这两个方法,但正如berry120所说:您不需要在main中调用launch(args)方法,如果它扩展了应用程序,您可以只使用start方法

完成后,您可以使用

stage.setOnCloseRequest(e -> {
//code to execute, something like socket.close();
});

您可以将stage.show()更改为stage.showAndWait()

您可以在start(stage primaryStage)方法的开头运行此setupConnection方法。这样,它将在显示stage之前执行。您也可以从main方法运行这两个方法,但正如berry120所说:您不需要调用启动(args)方法,如果它扩展了应用程序,则只需使用start方法即可

完成后,您可以使用

stage.setOnCloseRequest(e -> {
//code to execute, something like socket.close();
});

您可以将stage.show()更改为stage.showAndWait()

将JavaFX应用程序中的
start(…)
方法看作是“传统”Java应用程序中的
main(…)
方法的等价物;主要区别在于
start(…)
方法在UI线程上执行,并接收一个
Stage
实例作为方便。将JavaFX应用程序中的
start(…)
方法视为“传统”Java应用程序中的
main(…)
方法的等价物;主要区别在于
start(…)
方法在UI线程上执行,并接收一个
Stage
实例作为方便。将JavaFX应用程序中的
start(…)
方法视为“传统”Java应用程序中的
main(…)
方法的等价物;主要区别在于
start(…)
方法在UI线程上执行,并接收一个
Stage
实例作为方便。那么我必须创建另一个类吗?一个运行main,另一个运行fx应用程序?@IvanLorenzo一点也不,只需将main方法保持原样就可以了。那么我必须创建另一个运行mai的类吗n和另一个用于fx应用程序?@IvanLorenzo一点也不,只需让你的fx类中的main方法保持原样。那么我是否必须创建另一个类,一个运行main,另一个运行fx应用程序?@IvanLorenzo一点也不,只需让你的fx类中的main方法保持原样。