Не удается инициализировать ObjectInputStream - PullRequest
0 голосов
/ 08 июня 2019

Я устанавливаю клиент-серверное приложение, используя 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)
...