Вот уже второй вопрос задаете и все такойже бестолковый.
Во первых причем тут javafx вообще? Это вообще ui и никаким боком и уж темболее сложностей просто по определению быть не может ну вообще никак и никаким боком.
Во вторых, абсолютно, подчеркиваю АБСОЛЮТНО, все что должно волновать на данный момент это архитектура. И начать НУЖНО именно с нее, сядьте, возьмите просто клочок бумаги и напишите пунктами в столбик что необходимо от чата, вот прям все что вы от него хотите, отчертите линию и справа также столбиком сгрупируйте хотелки по их смыслу, дальше уже для полученных групп справа написать псевдокод , что будет использоваться для этой фичи и какие типы данных будут ходить. Подобное я приводил уже в предудщем вашем вопросе но так и быть накидаю еще и тут пример.
В третих, на тостер приходить надо уже с конкретной проблемой да еще и с которой нагуглить ничего не удалось, что то типа вот у меня сериализация, вот метод сериализация, вот десериализации, а вот ошибка и немогу понять почему.
По второму пункту пример
Хочу | Объединение схожего | Как сделать
----------------------------------------------------------------------------------------------------------------
1 чат с другом | 1 | Формат (кому, откого, сообщение)
2 история | 2 | Хранить в sql бд форматом сообщений
3 чат со всеми | 1 | Формат (от кого, сообщение)
4 чат со всеми но в комнате | 1 | Формат (от кого, комната, сообщение)
5 авторизация | 3 | хранить в sql базе, передавать Форматом(логин, пароль)
6 общение клиент сервер | | Текстовый вид, Json
7 регистрация | 3 | хранить в sql , передавать Форматом(логин, пароль)
n
По результату берешь и систематизируешь уже конкретнее типа такого:
1) Нарисовалось много разных форматов сообщений и надо их както отличать а значит сделаю класс родителя с полем int которое будет хранить тип сообщения. Проблема обмена информацией между клиентом и сервером решена полностью с обеих сторон.
abstract class AMessage{
int messType;
}
2) Необходим универсальный метод сериализации и десериализации объектов из\в json. Возьму библиотеку gson, почитав ее доки получился вот такой простой способ без колхоза. Проблема полностью решена.
public <T> T fromJson(String json, Class<T> classOfT){
Gson gson = new GsonBuilder().create();
try{
return gson.fromJson(json, classOfT);
}catch(JsonSyntaxException jse){
return null;
}
}
public String toJson(Object obj){
Gson gson = new GsonBuilder().setPrettyPrinting().create();
try{
return gson.toJson(obj);
}catch(JsonSyntaxException jse){
return null;
}
}
3) Надо назначить и написать классы для каждого сообщения
Для сообщения в комнату будет так
//от кого, комната, сообщение
class RoomMessage extends AMessage{
String from;
String roomName;
String message;
RoomMessage(String from, String roomName, String message){
this.messType = 10;
this.from = from;
this.roomName = roomName;
this.message = message;
}
}
n - такой будет класс регистрации и т.д.
Шаг n.
Вот только теперь начинаешь писать код. Причем при написании идешь по всем шагам и только так как описал это ранее, даже если в процессе реализации это оказалось сложно\криво\глупо\неправильно.
Программирование на самом деле состоит процентов на 90 из вот такой волокиты с написанием на бумаге всего и вся и только из 10% реализации. Кроме того таким способом все получится сделать очень быстро, логично и понятно, будет очень легко искать ошибки в программе и дебажить ее. Кроме того еще и получишь сразу почти готовую документацию которую останется только причесать и можно будет показать другому кодеру и он сразу въедет что тут и как работает. А вот заниматься написанием кода "эмпирическим" путем всегда тупиковое дело в котором будешь буксовать на месте, постоянно забывать что тут и как а главное зачем и почему неработает.
ps еслибы я был преподавателем, а Вы студентом, надавал бы по заднице и вообще заставил вместо такой работы при мне писать от и до всю логику програмки на бумаге а затем рассказывать зачем и почему так сделал.