Java 如何中断/暂停图像的读取?

Java 如何中断/暂停图像的读取?,java,image,javax.imageio,Java,Image,Javax.imageio,我正在创建一个显示大图像的面板。我正在使用ImageIO.read(URL)方法显示图像。现在,我必须添加一些功能来中断或暂停给定图像URL的读取过程 我该怎么做 BufferedImage image = null; URL urlImage = new URL(surl); image = ImageIO.read(urlImage); 没有任何方法可以开箱即用。你可以做的是,把它放在一个单独的线程中,然后停止或中断它 请记住,Thread.stop()被标记为不推荐使用,这是有充分理由的

我正在创建一个显示大图像的面板。我正在使用
ImageIO.read(URL)
方法显示图像。现在,我必须添加一些功能来中断或暂停给定图像URL的读取过程

我该怎么做

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

没有任何方法可以开箱即用。你可以做的是,把它放在一个单独的线程中,然后停止或中断它


请记住,
Thread.stop()
被标记为不推荐使用,这是有充分理由的,请考虑可能发生的内存泄漏。顺便说一句,为什么需要添加这样的功能?

没有现成的方法。你可以做的是,把它放在一个单独的线程中,然后停止或中断它


请记住,
Thread.stop()
被标记为不推荐使用,这是有充分理由的,请考虑可能发生的内存泄漏。顺便说一句,你为什么需要添加这样的功能?

你肯定需要另一个线程,你可以从中关闭
InputStream
,而
ImageIO.read
正从中读取。因此,首先,您需要重新设计代码:

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()

您肯定需要另一个线程,您可以从中关闭
InputStream
哪个
ImageIO.read
正在读取。因此,首先,您需要重新设计代码:

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()

“添加功能以中断或暂停读取”
ImageIO.read()
是一种阻塞方法,因此我不喜欢您的机会。这似乎是一个奇怪的要求。通过这样做,您试图实现的功能是什么?我有一些可能的答案围绕着
InputStream
MediaTracker
,但要缩小范围,请尝试填写此功能的用例或功能。我想创建一个云应用程序,其中我的图像文件位于云端,大小约为10-20mb,一旦我开始阅读该文件,我无法控制停止,我不想等待下载完整的文件。“添加中断或暂停读取的功能”
ImageIO.read()
是一种阻止方法,因此我不喜欢你的机会。这似乎是一个奇怪的要求。通过这样做,您试图实现的功能是什么?我有一些可能的答案围绕着
InputStream
MediaTracker
,但要缩小范围,请尝试填写此功能的用例或功能。我想创建一个云应用程序,其中我的图像文件位于云端,大小约为10-20mb,一旦我开始阅读该文件,我无法控制停止下载,也不想等待下载完整的文件。我想OP希望最终用户能够停止或取消下载。@MarkoTopolnik那么我想这将是一个解决方案。调用Thread.stop()永远不是一个解决方案,尤其是在它进行I/O时。正如我所说,他应该知道内存泄漏和其他问题,使用它。意识到
线程.stop的问题意味着不使用它。它唯一可能的用途是在立即停止胜过所有其他方面的场景中,如系统稳定性、JVM的一致性等。基本上,一旦您停止线程,最好是在关闭整个JVM之前做的最后一件事。我想OP希望最终用户能够停止或取消下载。@MarkoTopolnik那么这将是一个解决方案。调用Thread.stop()永远都不是一个解决方案,尤其是在它进行I/O时。正如我所说的,他应该知道内存泄漏和其他问题,使用它。意识到
线程.stop的问题意味着不使用它。它唯一可能的用途是在立即停止胜过所有其他方面的情况下,如系统稳定性、JVM的一致性等。基本上,一旦你停止一个线程,最好是在关闭整个JVM之前做的最后一件事。