2012-04-13 3 views
1

큰 이미지를 보여주는 패널을 만들고 있습니다. 이미지를 표시하려면 ImageIO.read(URL) 메서드를 사용하고 있습니다. 이제 주어진 이미지 URL의 읽기 프로세스를 중단하거나 일시 중지하는 기능을 추가해야합니다.이미지 읽기를 중단/일시 중지하는 방법은 무엇입니까?

어떻게하면됩니까?

BufferedImage image = null; 
URL urlImage = new URL(surl); 
image = ImageIO.read(urlImage); 
+1

* "독서를 중단하거나 일시 중지하는 기능 추가"*'ImageIO.read()'는 차단 방법이므로 사용자의 기회가 마음에 들지 않습니다. OTOH 이상한 요구 사항입니다. 이 작업을 통해 구현하려는 기능은 무엇입니까? 나는 가능한 대답을'InputStream' 또는'MediaTracker'를 중심으로 다루지 만 그것을 좁히기 위해이 기능의 유스 케이스 나 특징을 채우려고 시도합니다. –

+0

내 이미지 파일이 클라우드에 있고 10-20MB와 같이 크기가 큰 클라우드 응용 프로그램을 만들고 싶습니다. 그리고 그 파일을 읽기 시작한 후에는이를 제어 할 수 없어 기다릴 필요가 없습니다. 완전한 파일을 다운로드 중입니다. –

답변

0

ImageIO.read에서 읽고있는 InputStream을 닫을 수있는 다른 스레드가 있어야합니다. 그래서, 우선, 당신은 당신의 코드를 재 설계해야합니다

다른 스레드에서
final InputStream stream = new URL(surl).openStream(); 
// find a way to push the 'stream' reference to the other thread 
final BufferedImage image = ImageIO.read(stream); // this will block 

, 당신은 stream.close()를 호출해야합니다.

+0

고마워, 나는 그것을 시도 할 것이다. –

1

상자에서 꺼내는 방법은 없습니다. 당신이 할 수있는 일은, 이것을 별도의 스레드에 넣고 중지하거나 중단하는 것입니다.

Thread.stop()은 좋은 이유로 인해 권장되지 않는 것으로 표시되어 있으며 메모리 누수가 발생할 수 있다고 생각합니다. Btw. 그런 기능을 왜 추가해야합니까?

+0

OP는 최종 사용자가 다운로드를 중지하거나 취소 할 수 있기를 원합니다. –

+0

@MarkoTopolnik 그러면 이것은 내가 생각하는 해결책이 될 것입니다. – dwalldorf

+1

Thread.stop() 호출은 특히 I/O를 수행하는 경우 솔루션이되지 않습니다. –