Я устанавливаю клиент-серверное приложение, используя JavaFX.Для создания пользовательского интерфейса я использовал SceneBuilder.
У меня нет проблем с классом сервера и с отправкой и получением данных в виде простой строки (readUTF, writeUTF).Я решил пойти дальше - отправлять и получать объекты между клиентом и сервером.И тут у меня проблема.Когда я удаляю строку, которая инициализирует ObjectInputStream, программа работает хорошо, но если нет, графический интерфейс не включается, и если я закрываю сервер, я получаю исключение ниже.
Короче: я не могу инициализировать ObjectInputStream вМетод инициализации, потому что графический интерфейс не включается.
MainClient.class:
public class MainClient extends Application {
@Override
public void start(Stage primaryStage) throws Exception{
Parent root = FXMLLoader.load(getClass().getResource("page/client.fxml"));
primaryStage.setScene(new Scene(root));
primaryStage.setTitle("Hello World");
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Метод инициализации в классе контроллера:
public void initialize(URL location, ResourceBundle resources) {
try {
socket = new Socket("localhost", 7575);
//out = new DataOutputStream(socket.getOutputStream());
//in = new DataInputStream(socket.getInputStream());
bos = new BufferedOutputStream(socket.getOutputStream());
oos = new ObjectOutputStream(bos);
bis = new BufferedInputStream(socket.getInputStream());
ois = new ObjectInputStream(bis);
}
catch(IOException e) {
e.printStackTrace();
}
}
Примечание об исключении:
Picked up JAVA_TOOL_OPTIONS: -Djava.io.tmpdir=/home/oska/.var/app/com.jetbrains.IntelliJ-IDEA-Community/cache/tmp/
Gtk-Message: 13:38:07.490: Failed to load module "atk-bridge"
java.io.EOFException
at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2681)
at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:3156)
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:862)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:358)
at controller.ControllerClient.initialize(ControllerClient.java:43)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2548)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3214)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3175)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3148)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3124)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3104)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3097)
at MainClient.start(MainClient.java:11)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$424(LauncherImpl.java:863)
at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$404(PlatformImpl.java:326)
at com.sun.javafx.application.PlatformImpl.lambda$null$402(PlatformImpl.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$403(PlatformImpl.java:294)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
at com.sun.glass.ui.gtk.GtkApplication.lambda$null$208(GtkApplication.java:245)
at java.lang.Thread.run(Thread.java:748)