0

我在使用 ImageIcon().GetImage() 时遇到问题

奇怪的是,它有时可以工作并显示带有地图的窗口,而其他时候则不能。它也可以完美地在其他计算机上运行,​​但不能在我的计算机上运行!

我已经尝试了一切,重新安装 Java,重新安装 IntelliJ,还禁用了我的防火墙,但无济于事。我还在 C# 中编写了一个类似的程序,它运行良好,这让我相信这不是权限错误。我还在带有板载显卡的基本 Windows XP 系统上对其进行了测试,该显卡也可以完美运行。

这是我的代码:

public class main {

public static void main(String[] args) {
    System.out.println("Running main..");
    try
    {
        URL url = new URL("http://maps.googleapis.com/maps/api/staticmap?center=-33.80382155278416,18.567184266922002&zoom=17&size=1024x1024&maptype=hybrid&sensor=false&format=png&key=AIzaSyCVnp9iTXRSS3ZE5FjzF7uNZavazWhLko4");
        Image img=new ImageIcon(url).getImage();
        System.out.println("INFO :"+img);
        new ImageFrame(img);

    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
}

public static class ImageFrame extends JFrame{

    public ImageFrame(Image img){

        setPreferredSize(new Dimension(540, 480));
        setaImg(img);
        ImagePanel somePanel = new ImagePanel(540, 480);
        add(somePanel);
        setVisible(true);
    }

    private Image aImg;

    public Image getaImg() {
        return aImg;
    }

    public void setaImg(Image aImg) {
        this.aImg = aImg;
    }

    public class ImagePanel extends JPanel{

        public ImagePanel(int width, int height){
            setPreferredSize(new Dimension(width, height));
        }

        @Override
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.drawImage(getaImg(), 0, 0, null); // see javadoc for more info on the parameters
        }
    }



}

 }

我已经通过调试器运行了它,它停在这一行:

Image img=new ImageIcon(url).getImage();

但没有错误,它只是永远挂起。

我完全不明白为什么它不能在我的系统上运行,而且只能在我的系统上运行。任何帮助将不胜感激。

4

2 回答 2

6

对我来说很好

在此处输入图像描述

谷歌没有阻止你是他们吗?从记忆中,您每天大约有 10,000 个查询。

尝试使用InputStream( URL.openStream()) 手动下载 URL,看看您是否收到了除图像二进制文件之外的某种响应。

更新

经过调查,发现是 Java 7 和 IPv6 的问题,如此处所述使用 Java 下载文件随机冻结

于 2012-08-29T00:34:45.213 回答
3

始终在 EDT 上启动和更新 GUI。有关更多详细信息,请参阅Swing 中的并发。


g.drawImage(getaImg(), 0, 0, null); // see javadoc for more info on the parameters

该评论是非常好的建议,因为 4 字符编辑应该可以解决问题。

g.drawImage(getaImg(), 0, 0, this); // Observer is good for asynchronous image load
于 2012-08-29T01:11:07.473 回答