本帖最后由 x00230032 于 2011-05-30 22:45:44 编辑

解决方案 »

  1.   

    first.ImagePreviewer 不能转换成 java.io.File
      

  2.   

    刚才试了下代码,确实
     event.getNewValue()返回一个object,而且这个是chooser的事件,为啥会运行时变成ImagePreviewer 的对象了
      

  3.   

    File f = (File) event.getNewValue();event.getNewValue()得到的是一个ImagePreviewer,强制转换为File,肯定会有问题啊
      

  4.   

    首先,你这不叫编译错误,叫运行时错误
    错误的原因在于public void propertyChange(PropertyChangeEvent event)
                {
                    if(event.getPropertyName() == JFileChooser.SELECTED_FILE_CHANGED_PROPERTY);
                    {
                        // the user has selected a new file
                        File f = (File) event.getNewValue();      //这里报错
    这里if(event.getPropertyName() == JFileChooser.SELECTED_FILE_CHANGED_PROPERTY);后面多了个分号,其余的不用多说了吧
      

  5.   

    因为很多地方都会导致propertyChange事件发生,不一定每次发生都是因为选择了文件,比如你调用
    chooser.setFileFilter(filter);
    chooser.setAccessory(new ImagePreviewer(chooser));
    chooser.setFileView(new FileIconView(filter, new ImageIcon("palette.gif")));
    这些都会导致chooser的属性发生改变而发生事件,所以你修改一下你的事件里的代码,判断一下属性改变的是否是文件,是再继续强行转换,就可以了,比如    public ImagePreviewer(JFileChooser chooser)
        {
            setPreferredSize(new Dimension(100, 100)); 
            setBorder(BorderFactory.createEtchedBorder());
            
            chooser.addPropertyChangeListener(new PropertyChangeListener()
            {
                public void propertyChange(PropertyChangeEvent event)
                {
                    if(event.getPropertyName() == JFileChooser.SELECTED_FILE_CHANGED_PROPERTY);
                    {
                        // the user has selected a new file
                        if (event.getNewValue() instanceof File) { //追加一个判断
                            File f = (File) event.getNewValue();      //这里报错
                                if(f == null)
                            {
                                setIcon(null);
                                return;
                             }
                        
                            // read the image into an icon
                            ImageIcon icon = new ImageIcon(f.getPath());
                        
                            // if the icon is too large to fit ,scale it
                            if(icon.getIconWidth() > getWidth())
                                icon = new ImageIcon(icon.getImage().getScaledInstance(getWidth(), -1, Image.SCALE_DEFAULT));
                            setIcon(icon);
                        }
                    }
                }
            });
        }
      

  6.   

    7L好眼力
    if(event.getPropertyName() == JFileChooser.SELECTED_FILE_CHANGED_PROPERTY);
    这个本身就是对选择文件造成propertyg改变发生事件作的判断,只是因为后面多了个; 所以if相当于后面接的是空代码,然后后面的{}内的代买相当无条件执行。
      

  7.   


    是不是说下面这段代码
    FileNameExtensionFilter filter = new FileNameExtensionFilter("Image files", "jpg", "jpeg", "gif");Java1.5不支持 ?