import java.awt.*;
import java.awt.event.*;
class xt extends Frame{

win w;
static Image im;


xt(){
im=getToolkit().getImage("E:\\休闲\\变形金刚\\2009310102233116_l.jpg"); //(1)
int n=xt.im.getWidth(this);
System.out.println(n); //(2)


w=new win(this);

w.setSize(600,400);
w.setVisible(true);



setVisible(true);
setSize(800,600);
addWindowListener(
new WindowAdapter(){
public void windowClosing(WindowEvent we){
System.exit(0);
}
}
);
} public static void main(String in[]){
xt xto=new xt();
}}class win extends Window{
win(Window w){
super(w);
}

public void paint(Graphics g){


g.drawImage(xt.im,0,0,600,400,this);



}
}
以上(1)处的图片可以正常显示,
但(2)处打印出的宽度是-1,是为什么?我想做个根据图片尺寸自动调整窗口大小的程序,
但无法获得正确的尺寸。请各位帮我看看什么原因.

解决方案 »

  1.   

     int n=xt.im.getWidth(this); //(2)
      

  2.   


    win(Window w){
            super(w);
            System.out.println(xt.im.getWidth(this));
        }
      

  3.   


    class xt extends Frame{
        win w;
        static Image im;
        xt(){
            im=getToolkit().getImage("F:\\大杂烩\\图片\\326.gif");        //(1)
            int n=xt.im.getWidth(this);
            System.out.println(n);                                                                                                        //(2)
            w=new win(this);
            w.setSize(600,400);
            w.setVisible(true);
            int width = w.getImgWidth();
            System.out.println("width is :"+width);
            setVisible(true);
            setSize(800,600);
            addWindowListener(
                new WindowAdapter(){
                    public void windowClosing(WindowEvent we){
                        System.exit(0);
                    }
                }
            );
        }
        public static void main(String in[]){
            xt xto=new xt();    
        }
    }class win extends Window{
        win(Window w){
            super(w);
        }
        public int getImgWidth(){
         return xt.im.getWidth(this);
        }
        public void paint(Graphics g){
            g.drawImage(xt.im,0,0,600,400,this);
        }
    }
    运行结果:
    -1
    width is :100
      

  4.   

    这是为什么啊??
    你再看看这段代码,这段代码比较简单,可能更容易定位问题import java.awt.*;
    import java.awt.event.*;public class smp111 extends Frame 
    {
    public static void main(String args[])
    {
    smp111 frm=new smp111();
    } Image img;
    smp111()
    {
    setSize(440,380);

    setBackground(Color.cyan);

    setVisible(true);

    Toolkit tk=getToolkit();

    img=tk.getImage("E:\\休闲\\Rihanna04.jpg");       //(1)

    addWindowListener(new WindowAdapter(){
    public void windowClosing(WindowEvent e){System.exit(0);}});
    } public void paint (Graphics g)
    {
    int wt=img.getWidth(this);
    int ht=img.getHeight(this);
    g.drawImage(img,20,55,wt/2,ht/2,this);

    System.out.println(wt+"   "+ht);

    try{
    Thread.sleep(500);
    }catch(Exception e){}
    }
    }其中(1)处用自己的图片代替,我把显示尺寸的语句放在了paint()中,
    程序运行后,你不断的把窗口最小化再还原,反复多次,
    每次都会调用paint()方法,每次都会打印尺寸。第一次打印两个-1,
    后面打印的都是正确值,
    哪位高手来解释下,这是为什么?
      

  5.   

    awt.Toolkit是异步载入图片,当图片载入未完成时,尺寸返回-1,图片载入完成之后,调用被注册的图片观察者 ImageObserver
      

  6.   

    可以通过调用 toolkit.prepareImage函数来判定图片是否载入完成。如需阻塞等待图片载入完成,可用循环判断,如果未完成就等待的方法来实现。
      

  7.   

    不太明白,你说的"图片载入未完成"指的是drawImage()语句正在执行但还没执行完吗?