我原来是xp系统,编写了一个系统,能正常运行。而到windows7上不能正确运行。
可是eclipse 3.4 + JDK 1.6 ,的组合,能运行任何新写的简单程序,就是运行不了我的那个原有系统
经过调试,执行到这句话时,
JFileChooser chooser = new JFileChooser();
抛出异常,出错:
java.lang.ArrayIndexOutOfBoundsException: 3184
at sun.awt.shell.Win32ShellFolder2.getFileChooserIcon(Unknown Source)
at sun.awt.shell.Win32ShellFolderManager2.get(Unknown Source)
at sun.awt.shell.ShellFolder.get(Unknown Source)
at com.sun.java.swing.plaf.windows.WindowsLookAndFeel$LazyWindowsIcon.createValue(Unknown Source)没道理啊。。
逻辑上都找不出问题的可能来源。

解决方案 »

  1.   

    有可能是windows7对jdk1.6的支持部不够。
    因为jdk的实现也是充分考虑了操作系统来实现的,windows7和以前版本的差异比较大,造成这个结果也是很正常的。
    在此之前你得检查代码是否还有不完善的地方。
      

  2.   

    换个LookAndFeel,如Nimbus /Metal 看看有没有这个问题。
      

  3.   

    我先声明,假如代码有问题,那么,为什么在XP上可以运行呢?:
    假如是兼容有问题为什么在这句JFileChooser这么普通的一个类上出问题呢?
    期待高手做答
      

  4.   

    把你的代码和完整的logo贴出来
    只看logo大家只能猜测
      

  5.   

      static Image[] fileChooserIcons = new Image[47];    static Image getFileChooserIcon(int i) {
            if (fileChooserIcons[i] != null) {
                return fileChooserIcons[i];
            } else {
                if (fileChooserBitmapBits == null) {
                    fileChooserBitmapBits = getFileChooserBitmapBits();
                }
                if (fileChooserBitmapBits != null) {
                    int nImages = fileChooserBitmapBits.length / (16*16);
                    int[] bitmapBits = new int[16 * 16];
                    for (int y = 0; y < 16; y++) {
                        for (int x = 0; x < 16; x++) {
                            bitmapBits[y * 16 + x] = fileChooserBitmapBits[y * (nImages * 16) + (i * 16) + x];
                        }
                    }
                    BufferedImage img = new BufferedImage(16, 16, BufferedImage.TYPE_INT_ARGB);
                    img.setRGB(0, 0, 16, 16, bitmapBits, 0, 16);
                    fileChooserIcons[i] = img;
                }
            }
            return fileChooserIcons[i];
        }i是3184,看来真是bug了。
      

  6.   

    java和平台无关是因为虚拟机屏蔽掉了平台的差异...
    估计楼主window7下装的是xp版本的虚拟机
      

  7.   

    3184:到底代表了什么意思
    这个BUG是JDK自己的吗?
    我的理解,windows7是32位的本质上与XP是一样的。怎么会运行不起来呢。
    有些人整个代码,我想不必了,因为就出在这个点上。
      

  8.   


    我用Win7做开发 一切OK 还是64位的呢  是代码或者配置的缘故 
      

  9.   

    对了 看你是不是导入了 第三方包什么的     有的包里文件名一模一样 但是结果就大不一样了 你也不知道你实例的是个什么东西  看下你的import 是否正常
      

  10.   

    好像没问题吧,我的系统也是Win7的,能运行的。
      

  11.   

    大哥们,我不是说ECLIPSE不能运行!!!
    只是我的系统为什么到那句话就出问题了。
      

  12.   

    java -version 的版本是 1.6.0_?根据 Sun 提供的资料,对应于 Windows 系统,JDK 1.5 最小的版本号:Windows 7, Windows 2008 R2, Windows Vista SP2, Windows 2008 SP2 需要 1.5.0_21 及以后版本
    Windows 2008 需要 1.5.0_19 及以后版本
    Windows Vista 需要 1.5.0_14 及以后版本JDK 1.6 系统支持最小的版本号Windows 7 需要 1.6.0_14 及以后版本
    Windows Server 2008 R2 需要 1.6.0_16 及以后版本
      

  13.   

    貌似真是BUG!!!!
    http://www.baidu.com/s?wd=ArrayIndexOutOfBoundsException%3A%203184&tn=sogouie_dg
      

  14.   

    非常感谢大家 的帮助,非常感谢。
    问题已经解决了。
    我原来的版本是JDK 1.6.0 beta 2.
    最新从官方网站下载下来:JDK 1.6.0.20在我没有修改任何代码的情况下,可以顺利运行。感谢CSDN,感谢大家