소켓을 통해 이미지를 보낼 때 Java OutOfMemory

루카스 클레 토

기본적으로 로봇을 사용하여 클라이언트에서 이미지를 가져 와서 몇 초마다 서버로 보내는 애플리케이션을 만들었 기 때문에 다른 PC에서 무슨 일이 일어나고 있는지 볼 수 있습니다. 문제는 이미지를 배열 등에 저장하는 것 같습니다. 몇 초 후에 충돌이 발생하기 때문입니다. 이미지를 받아 화면에 씁니다. 그러나 잠시 후 OutOfMemory를 제공합니다. 누구든지 원인에 대한 힌트가 있습니까?

요청 된 코드 스 니펫은 다음과 같습니다.

섬기는 사람:

private class Conexao extends Thread {

    public static final int PORTA = 12000;
    public ObjectOutputStream out;
    public ObjectInputStream in;
    public Image image;
    private boolean fim;

    public Conexao(String ip) throws IOException {
        try {
            Socket socket = new Socket(ip, Conexao.PORTA);
            this.out = new ObjectOutputStream(socket.getOutputStream());
            this.in = new ObjectInputStream(socket.getInputStream());
        } catch (IOException e) {
            throw e;
        }
    }

    public void encerrar() {
        this.fim = true;
    }

    @Override
    public void run() {
        this.fim = false;
        while (!this.fim) {
            Mensagem mensagem = null;

            try {
                mensagem = ((Mensagem) in.readObject());
            } catch (IOException | ClassNotFoundException e) {
            }

            if (mensagem != null) {
                this.image = mensagem.getImage();
                Cliente.this.painel.repaint();
            }
        }
    }
}

고객:

private static class Conexao extends Thread {

    private static Image CURSOR;
    static {
        try {
            CURSOR = ImageIO.read(new File("images\\mouse.png"));
        } catch (IOException e) {
            CURSOR = null;
        }
    }

    private ObjectOutputStream out;
    private ObjectInputStream in;

    public Conexao() throws IOException {
        try {
            ServerSocket serverSocket = new ServerSocket(Servidor.PORTA, 1);
            Socket socket = serverSocket.accept();
            this.out = new ObjectOutputStream(socket.getOutputStream());
            this.in = new ObjectInputStream(socket.getInputStream());
        } catch (IOException e) {
            throw e;
        }
    }

    @Override
    public void run() {
        try {
            Robot robot = new Robot();

            for (;;)
                try {
                    Thread.sleep(10);

                    Point p = MouseInfo.getPointerInfo().getLocation();
                    BufferedImage img = robot.createScreenCapture(new Rectangle(0, 0, Toolkit.getDefaultToolkit().getScreenSize().width, Toolkit.getDefaultToolkit().getScreenSize().height));
                    if (Conexao.CURSOR != null) {
                        img.getGraphics().drawImage(CURSOR, p.x, p.y, null);
                    } else {
                        Graphics2D g = (Graphics2D) img.getGraphics();
                        g.setColor(Color.WHITE);
                        g.fillOval(p.x - 5, p.y - 5, 10, 10);
                        g.setStroke(new BasicStroke(2));
                        g.setColor(Color.BLACK);
                        g.drawOval(p.x - 5, p.y - 5, 10, 10);
                        g.dispose();
                    }

                    this.out.writeObject(new Mensagem(img, p));
                    this.out.flush();
                } catch (IOException | InterruptedException e) {
                    e.printStackTrace();
                }

        } catch (AWTException e) {
        }
    }
}
션 반 고더

호출 시도 this.out.reset();this.out.flush();.

이것은 ( Serialization FAQ이 사이트에 따라 ) 반복 된 객체가 캐시 참조로 최적화 될 수 있도록 기록 된 모든 객체의 캐시를 유지하는 ObjectOutputStream 의 문제인 것 같습니다 . 또한 개체를 다시 보내기 전에 개체의 값이 변경되지만 캐시 된 개체가 이전 값을 유지하는 경우에도 문제가 발생할 수 있습니다. 두 경우 모두 전화 로 문제가 해결됩니다. 안타깝게도 클래스 문서에는 이에 대한 설명이 없습니다.reset()

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

소켓을 통해 .jpg 또는 이미지를 보낼 때 Java 연결 재설정

Java 소켓을 통해 작은 파일을 보낼 때 성능 문제

Gmail을 통해 이메일을 보낼 때 Java smtp 오류

Linux에서 소켓을 통해 연결하지 않고 데이터를 보낼 때 충돌

소켓을 통해 파일을 보낼 때 부호를주고 무한 루프를 종료하는 방법

소켓을 통해 그림 파일을 보낼 때 왜 바이트 차이가 있습니까?

Java 객체를 obj-c로, obj-c를 소켓을 통해 Java로 보낼 수 있습니까?

Python : 소켓을 통해 보낼 메시지 크기

AWS SES를 통해 이메일을 보낼 때 Openssl 문제

이메일을 보낼 때 mvc의 예외를 통해

Sendgrid API를 통해 이메일을 보낼 때 오류 발생

소켓을 통해 이미지를 바이트로 보내기

Java Mail API를 통해 이메일을 보낼 때 오류가 발생합니까?

Bot Framework nodejs에서 Twilio 채널을 통해 MMS를 보낼 때 이미지가 URL로 바뀝니다.

파이썬을 통해 명령을 보낼 때 유형 오류

https를 통해 POST 요청을 보낼 때 SSLHandshakeException 발생

인 텐트를 통해 Bitmap을 보낼 때 활동이 시작되지 않음

Boost::Asio : 주어진 소켓을 통해 버퍼를 보낼 때 async_write가 버퍼를 자르는 이유는 무엇입니까?

소켓을 통해 데이터베이스로 보낼 BufferedInputStream을 byte []로

Excel 매크로를 통해 이메일을 보낼 때 Outlook 보안 우회

Telegram Bot을 통해 이미지를 보낼 수 없음

소켓을 통해 보낼 RSA 키를 피클 할 수 없습니다.

MS Graph API를 통해 이메일을 보낼 때 이메일 서명 포함

URL을 통해 Python에서 PHP 파일로 메시지를 보낼 때 NULL 값

ajax를 통해 PHP로 파일을 보낼 때 정의되지 않은 색인

Django를 통해 이메일을 보낼 때 SSL 오류가 발생합니다.

aws를 통해 이메일을 보낼 때 AccessKey와 SecretKey만 필요합니까?

소켓을 통해 Java에서 CPP로 스크린 샷 보내기-이미지 수신 문제

소켓을 통해 서버에 이미지 보내기

TOP 리스트

  1. 1

    PrematureCloseException : 연결이 너무 일찍 닫혔습니다.

  2. 2

    MDRotatingPieChart를 회전하면 각도 대신 x / y 위치가 변경됩니다.

  3. 3

    c # 웹 사이트에서 텍스트를 복사하는 방법 (소스 코드 아님)

  4. 4

    jfreecharts에서 x 및 y 축 선을 조정하는 방법

  5. 5

    ArrayBufferLike의 typescript 정의의 깊은 의미

  6. 6

    Ionic 2 로더가 적시에 표시되지 않음

  7. 7

    복사 / 붙여 넣기 비활성화

  8. 8

    Google Play Console에서 '예기치 않은 오류가 발생했습니다. 나중에 다시 시도해주세요. (7100000)'오류를 수정하는 방법은 무엇입니까?

  9. 9

    정점 셰이더에서 카메라에서 개체까지의 XY 거리

  10. 10

    QT Designer를 사용하여 GUI에 이미지 삽입

  11. 11

    java Apache POI Word 기존 테이블 셀 스타일 및 서식이있는 행 삽입

  12. 12

    Kubernetes Horizontal Pod Autoscaler (HPA) 테스트

  13. 13

    Android Kotlin은 다른 활동에서 함수를 호출합니다.

  14. 14

    C # HttpWebRequest 기본 연결이 닫혔습니다. 전송시 예기치 않은 오류가 발생했습니다.

  15. 15

    어떻게 같은 CustomInfoWindow 다른 이벤트를 할 수 있습니다

  16. 16

    rclone으로 원격 디렉토리의 모든 파일을 삭제하는 방법은 무엇입니까?

  17. 17

    dataSnapShot.getValue () 반환 데이터베이스에 그겁니다 데이터 종료 널 (null)

  18. 18

    ORA-12557 TNS : 프로토콜 어댑터를로드 할 수 없습니다

  19. 19

    JNDI를 사용하여 Spring Boot에서 다중 데이터 소스 구성

  20. 20

    다음 컨트롤이 추가되었지만 사용할 수 없습니다.

  21. 21

    C # Asp.net 웹 API-JSON / XML 변환기 API 만들기

뜨겁다태그

보관