ImageIO.read(URL)需要很长时间

时间:2012-07-13 17:11:04

标签: java image swing javax.imageio imageicon

好吧,所以我试图从URL读取一个图像,但它并没有真正做任何事情。 这是我用来从URL检索图像的方法:

    public Image getImage(String url){
    try{
        System.out.println("gettingImage");
        return ImageIO.read(new URL(url));
    }catch(Exception e){
        e.printStackTrace();
        return null;
    }
}

我已经在System.out.println()中添加了,以确保在我调用它时该方法实际执行。

我传递给它的网址是:http://i3.kym-cdn.com/photos/images/masonry/000/349/917/065.png(这是一个有效的网址)

我的输出是:

gettingImage

它只是说'gettingImage'(来自我添加的System.out.println())并且由于某种原因实际上并没有得到图像。没有堆栈跟踪,只有输出。任何帮助将不胜感激。感谢。

3 个答案:

答案 0 :(得分:4)

你永远不应该调用一个需要很长时间才能从主线程内部返回的密集方法,这会冻结你的GUI。创建一个新的SwingWorker并在其中调用该方法。请参阅此example

答案 1 :(得分:3)

试试这个......

这个程序只是为了表明图像已经获得,我只是在使用System.out 从网址返回图像,以证明图像已获得。

我还使用了线程,以便进程密集型工作超出了负责用户界面的EDT (Event Dispatcher Thread)

您必须使用 Thread或SwingWorker ,否则在EDT上进行流程密集型工作最终会使您的 GUI无法响应......

public class UrlTest
{
    public static void main(String[] args)
    {
        new Thread (new Runnable()
        {
            @Override public void run()
            {
                try
                {
                    URL url = new URL("http://i3.kym-cdn.com/photos/images/masonry/000/349/917/065.png");
                    Image img = ImageIO.read(url);
                    System.out.println(img);
                }
                catch (Exception e)
                {
                    e.printStackTrace();
                }
            }
        }).start();
    }
}

答案 2 :(得分:2)

发现了为什么这不起作用的问题:我的代码没有任何内容,这是因为我的互联网一瞬间闪烁,而且无法从那个小闪烁中恢复过来。我不知道我的互联网一直闪烁,但我想这是因为当我把它发送给我的一个朋友时,它在他的电脑上工作得很好,所以它必须是因为互联网连接。谢谢你的所有想法。