2015-06-11 74 views
1

我试图建立一个聊天程序。我可以做到这一点,当我使用java awt包但java fx我似乎有点困惑。当你第一次建立一个java fx project所有的方法,即使public static void main(string args[])在那里,有一个地方,你开始primaryStage的编码...我没有问题编码我的程序的视觉方面它只是我不知道我应该设置我的方案,并把它放在哪里时,即时通讯做的Network部分..JavaFX聊天应用程序

**CODE: This is Just a View** 

Server extends Application{

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方法包含其他methods很好,但所有这些将前往ServerConnectionMethod现在我的问题是Wh ERE将我把我的一个ServerConnection方法,以便如果JavaFX应用程序正确启动,将伴随着我primary Stage

很抱歉的长期post..have一个String ="potato";

+0

想到'开始(...)'方法在JavaFX应用程序中相当于“传统”Java应用程序中的“main(...)”方法;主要区别在于''start(...)'方法在UI线程上执行,并且为了方便而接收'Stage'实例。 –

回答

0

运行时,它不会使用main()方法 - 你可以暂时删除它(作为一个实验)并检查,但有可能除了向后兼容性之外,它没有任何其他用途。你肯定应该而不是依靠主要方法做任何特殊的外汇应用程序的情况下;它只应该拨打launch(),而不是别的。

相反,您的主类应扩展Application,并且JavaFX运行库将为您创建一个实例,创建一个初级阶段并调用start方法,为您提供对该阶段的引用。从这种方法中,你可以做任何你喜欢的事情,但要记住它在UI线程上(所以你应该为任何长时间运行的任务创建一个额外的线程,就像你在任何其他工具包如Swing中一样。)

+0

所以我必须创建另一个运行主和另一个为fx应用程序的类? –

+0

@IvanLorenzo完全没有问题,只需将主要方法留在您的FX课程中即可。 – berry120

0

您可以在开始(Stage primaryStage)方法中运行此setupConnection方法。这样它将在展示舞台前被执行。你也可以直接运行main方法,但是如berry120所说:你不需要在main方法中调用launch(args)方法,如果它扩展了Application,那么你只需要使用start方法即可。

当你完成,你可以使用一个

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

而且你可以改变stage.show()来stage.showAndWait()