3

好的,所以我正在尝试从 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())并且由于某种原因实际上并没有得到图像。没有堆栈跟踪,只有那个输出。任何帮助将不胜感激。谢谢。

4

3 回答 3

4

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

于 2012-07-13T17:21:31.537 回答
3

试试这个....

这个程序只是为了证明图片是获取到的,我只是System.out在url返回的图片上使用,来证明图片是获取到的。

我还使用了一个线程,以便处理密集型工作不在EDT (Event Dispatcher Thread)负责 UI 的工作中。

您必须使用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();
    }
}
于 2012-07-13T18:06:59.550 回答
2

找到了为什么这不起作用的问题:这与我的代码无关,这是因为我的互联网一直闪烁一瞬间,并且无法从那个小闪烁中恢复。我不知道我的互联网一直在闪烁,但我想这是因为当我将它发送给我的一位朋友时,它在他的电脑上运行良好,所以一定是由于互联网连接。感谢您的所有想法。

于 2012-07-14T13:26:38.847 回答