Java-연결시 클라이언트가 오류를 제공함

xv435

저는 간단한 Java 메시징 프로그램을 작업 중입니다. 더 복잡한 기능에 대한 작업을 시작하기 전에 기본 시스템이 작동하도록하고 싶습니다. 현재

  1. 여러 클라이언트가 연결할 수 있음
  2. 여러 클라이언트가 서버가받는 메시지를 보낼 수 있습니다.
  3. 클라이언트가 종료되면 서버가 연결을 닫습니다.

이 코드는 특히 오류를 일으키는 것으로 보입니다. 내 ClientThread.java 스레드의 run () 메서드 (실행 가능을 구현)입니다. 이 스레드는 서버에서 들어오는 메시지를 처리하기위한 것입니다 (메시지 보내기는 정상적으로 작동 함).

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;

import javafx.application.Platform;
import javafx.scene.Scene;
import javafx.scene.text.Text;
import javafx.stage.Stage;


public class ClientThread implements Runnable{
    private Socket server;
    private DataInputStream in;
    private DataOutputStream out;
    public Text msgContent;
    public void login(Stage stage, Scene main, String username, String password, String portString, String host) {
    try {
        int port = Integer.parseInt(portString);
        this.server = new Socket(host, port);

        this.in = new DataInputStream(server.getInputStream());
        this.out = new DataOutputStream(server.getOutputStream());
        stage.setScene(main);
        Platform.runLater(new ClientThread());
    }
    catch (NumberFormatException e) {
        System.out.println("Invalid Port");
        return;
    }
    catch (IOException e) {
        System.out.println("Error Connecting to Server");
        return;
    }
}
public void run() {
    String msg = "";

    try {

        while (true) {
            msg = in.readUTF(); //This line gives Errors
            System.out.println("Read message from server");
            msgContent.setText(msgContent.getText() + msg + "\n");
            System.out.println("Added message from server to view");
        }

    }
    catch(Exception ioe) {
        ioe.printStackTrace();
        System.out.println("Failed to read message from server and add to view.");
    }

}
public void sendMsg(String msg) {
    try {
        out.writeUTF(msg);
    } catch (Exception ioe) {
        ioe.printStackTrace();
    }
}
}

msgContent는 JavaFX 프런트 엔드와 서버의 inputStream에있는 Text 객체입니다. 내 전체 코드는 여기에 있습니다 . 내가 얻는 오류는

com.sun.javafx.application.PlatformImpl $ 6 $ 1.run (Unknown Source)의 ClientThread.run (ClientThread.java:42)의 java.lang.NullPointerException at com.sun.javafx.application.PlatformImpl $ 6 $ 1.run (Unknown Source) at java.security.AccessController.doPrivileged (Native Method) at com.sun.javafx.application.PlatformImpl $ 6.run (Unknown Source) at com.sun.glass.ui.InvokeLaterDispatcher $ Future.run (Unknown Source) at com.sun.glass.ui.win.WinApplication._runLoop (Native Method) : com.sun.glass.ui.win.WinApplication.access $ 300 (Unknown Source) at com.sun.glass.ui.win.WinApplication $ 4 $ 1 .run (Unknown Source) at java.lang.Thread.run (Unknown Source) 서버에서 메시지를 읽고보기에 추가하지 못했습니다.

또한이 메서드를 실행하기 위해 Platform.runLater ()를 사용하고 있습니다. 내 코드가 작동하도록 위의 오류를 수정하는 방법을 알고 싶습니다. 미리 감사드립니다.

보석 바다

NullPointer 예외의 원인

in null입니다.

NullPointerException이 발생하는 이유는이 호출에서 ClientManager 클래스의 새 인스턴스를 생성하기 때문입니다. Platform.runLater(new ClientThread());, 따라서 inout멤버를 초기화 한 ClientManager의 기존 인스턴스를 사용하지 않습니다 . 대신,를 사용 Platform.runLater(this);하여 NullPointerException을 제거 할 수 있습니다 .

그러나 코드에는 다른 문제가 있습니다.

잘못된 동시 프로그래밍

응용 프로그램이 UI 입력에 대한 렌더링 또는 응답을 중지하는 JavaFX 응용 프로그램 스레드를 중단합니다. JavaFX 응용 프로그램 스레드를 기다리지 마십시오.

수행하려는 작업을 수행하는 한 가지 방법은 JavaFX 동시성 유틸리티 , 특히 작업을 사용하는 것 입니다.

자체 스레드에서 작업을 실행하면 루프를 수행하여 입력을 영원히 받아들이고 UI 스레드를 차단하지 않습니다. 다른 모든 데몬 스레드가 완료되면 자동으로 종료되도록 스레드를 데몬이 아닌 스레드로 만들 수 있습니다. Platform.runLater를 사용하여 입력을 UI에 다시 공급할 수 있습니다. 그러나 일부 메시지 텍스트를 업데이트하려는 위치에 제공 한 간단한 예제의 경우 대신 updateMessage 를 호출 할 수 있습니다 (태스크 클래스가 이러한 종류의 세부 정보를 처리하므로 Platform.runLater 호출이 필요하지 않습니다). 메시지 레이블을 업데이트하려면 해당 텍스트 속성을 작업의 메시지 속성에 바인딩 할 수 있습니다. 태스크 javadoc에이를 수행하는 방법에 대한 예제가 있습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Java-연결시 클라이언트가 오류를 제공함

분류에서Dev

Firebase 관리자 SDK Java 클라이언트가 갑자기 상태 코드 "unknown-error"와 함께 401 오류를 반환하기 시작했습니다.

분류에서Dev

연결 순서를 변경할 때 StackExchange Redis .NET 클라이언트가 메시지를받지 못함

분류에서Dev

SSH 클라이언트가 공용 IP를 통해 연결되지 않음

분류에서Dev

Android Proguard 규칙이 Twilio 클라이언트 SDK에 오류를 제공함

분류에서Dev

연결 해제 후 TCP 클라이언트가 다시 연결되지 않음

분류에서Dev

JAVA에서 UDP 서버를 클라이언트에 연결

분류에서Dev

Jenkins가 Amazon EC2 클라우드 구성시 오류를 제공함

분류에서Dev

클라이언트 연결시 Python gevent-socketio 서버 오류

분류에서Dev

Java 메소드 호출이 구문 오류를 제공함

분류에서Dev

nix-serve를 바이너리 캐시로 사용할 때 "오류 : 공개 키가 유효하지 않습니다"라는 클라이언트 nixos 오류

분류에서Dev

INADDR_ANY에서 수신하는 경우 클라이언트가 연결 한 실제 인터페이스를 확인하십시오.

분류에서Dev

loopj 라이브러리가 느린 인터넷에서 연결 거부 오류를 제공함

분류에서Dev

DHT와 Torrent 클라이언트를 함께 연결

분류에서Dev

클라이언트 '입력 크기가 서명과 일치하지 않음'과 연결할 때 Tensorflow 제공 오류

분류에서Dev

AFNetworking 클라이언트는 POST 작업 중 연결 해제시기를 어떻게 결정합니까?

분류에서Dev

클라이언트 공유 컨테이너가 활성화되면 Tyrus 클라이언트가 서버를 다시 시작할 때 다시 연결할 수 없습니다.

분류에서Dev

클라이언트가 ActiveMQ에 연결하는 동안 java.io.IOException : 전송 체계가 인식되지 않음 : [failovertcp] 오류를 발생시키는 이유는 무엇입니까?

분류에서Dev

AngularJS가 처음 실행시 404 오류를 제공함

분류에서Dev

WHN (무선 호스트 네트워크)을 통한 인터넷 연결 공유가 WHN 클라이언트에 DNS 서버를 제공하지 않음

분류에서Dev

하나의 클라이언트 연결 해제 (JAVA) 후 서버가 닫힙니다.

분류에서Dev

Argo 아티팩트에서 "http : 서버가 HTTPS 클라이언트에 HTTP 응답을 제공했습니다"라는 오류가 표시됨

분류에서Dev

Azure Key Vault 빠른 시작이 Key Vault 클라이언트를 제공하지 못함

분류에서Dev

클라이언트-서버 Java 연결

분류에서Dev

여러 클라이언트 호스트가 하나의 '외부'IP 주소를 공유하는 NAT 뒤에있는 경우 여러 클라이언트가 동일한 주소에 동시에 연결하려면 어떻게해야합니까?

분류에서Dev

Squirrel-Sql 클라이언트가 "SQL 연결을 열려고 시도하는 동안 예기치 않은 오류가 발생했습니다"와 함께 MySQL 8에 연결하지 못함

분류에서Dev

자바 클라이언트 연결 오류 : ChangeCipherSpec 메시지 시퀀스 위반

분류에서Dev

NServiceBus 테스트 클라이언트가 메시지를받지 못함

분류에서Dev

클라이언트가 서버에서 연결을 끊을 때 'try :'블록의 함수 내부에서 예외를 발생시킬 수 있습니까?

Related 관련 기사

  1. 1

    Java-연결시 클라이언트가 오류를 제공함

  2. 2

    Firebase 관리자 SDK Java 클라이언트가 갑자기 상태 코드 "unknown-error"와 함께 401 오류를 반환하기 시작했습니다.

  3. 3

    연결 순서를 변경할 때 StackExchange Redis .NET 클라이언트가 메시지를받지 못함

  4. 4

    SSH 클라이언트가 공용 IP를 통해 연결되지 않음

  5. 5

    Android Proguard 규칙이 Twilio 클라이언트 SDK에 오류를 제공함

  6. 6

    연결 해제 후 TCP 클라이언트가 다시 연결되지 않음

  7. 7

    JAVA에서 UDP 서버를 클라이언트에 연결

  8. 8

    Jenkins가 Amazon EC2 클라우드 구성시 오류를 제공함

  9. 9

    클라이언트 연결시 Python gevent-socketio 서버 오류

  10. 10

    Java 메소드 호출이 구문 오류를 제공함

  11. 11

    nix-serve를 바이너리 캐시로 사용할 때 "오류 : 공개 키가 유효하지 않습니다"라는 클라이언트 nixos 오류

  12. 12

    INADDR_ANY에서 수신하는 경우 클라이언트가 연결 한 실제 인터페이스를 확인하십시오.

  13. 13

    loopj 라이브러리가 느린 인터넷에서 연결 거부 오류를 제공함

  14. 14

    DHT와 Torrent 클라이언트를 함께 연결

  15. 15

    클라이언트 '입력 크기가 서명과 일치하지 않음'과 연결할 때 Tensorflow 제공 오류

  16. 16

    AFNetworking 클라이언트는 POST 작업 중 연결 해제시기를 어떻게 결정합니까?

  17. 17

    클라이언트 공유 컨테이너가 활성화되면 Tyrus 클라이언트가 서버를 다시 시작할 때 다시 연결할 수 없습니다.

  18. 18

    클라이언트가 ActiveMQ에 연결하는 동안 java.io.IOException : 전송 체계가 인식되지 않음 : [failovertcp] 오류를 발생시키는 이유는 무엇입니까?

  19. 19

    AngularJS가 처음 실행시 404 오류를 제공함

  20. 20

    WHN (무선 호스트 네트워크)을 통한 인터넷 연결 공유가 WHN 클라이언트에 DNS 서버를 제공하지 않음

  21. 21

    하나의 클라이언트 연결 해제 (JAVA) 후 서버가 닫힙니다.

  22. 22

    Argo 아티팩트에서 "http : 서버가 HTTPS 클라이언트에 HTTP 응답을 제공했습니다"라는 오류가 표시됨

  23. 23

    Azure Key Vault 빠른 시작이 Key Vault 클라이언트를 제공하지 못함

  24. 24

    클라이언트-서버 Java 연결

  25. 25

    여러 클라이언트 호스트가 하나의 '외부'IP 주소를 공유하는 NAT 뒤에있는 경우 여러 클라이언트가 동일한 주소에 동시에 연결하려면 어떻게해야합니까?

  26. 26

    Squirrel-Sql 클라이언트가 "SQL 연결을 열려고 시도하는 동안 예기치 않은 오류가 발생했습니다"와 함께 MySQL 8에 연결하지 못함

  27. 27

    자바 클라이언트 연결 오류 : ChangeCipherSpec 메시지 시퀀스 위반

  28. 28

    NServiceBus 테스트 클라이언트가 메시지를받지 못함

  29. 29

    클라이언트가 서버에서 연결을 끊을 때 'try :'블록의 함수 내부에서 예외를 발생시킬 수 있습니까?

뜨겁다태그

보관