关于运行时调用到接口中的数据而报错的一个问题~~请大家都来讨论一下~~指点一二~

NicholasXu 2007-12-25 04:19:12
//接口
public interface Constant {
String allString[][][][] = new String[3][27][1][1];
int[][] A = new int[2][3];
}
//普通的继承该接口的类
public class testCanvas extends Canvas implements Constant {
public testCanvas() {
initial();
}

public void initial() {
allString[1][2][0][0] = "";
}

public void paint() {;}
}


当编译工程的时候没有任何问题,但当运行到testCanvas的对象时,会抛出异常

ALERT: java/lang/NoSuchFieldError: No such field allString.[[[[Ljava/lang/String;.

这是为什么呢?如果把build环境改成1.3就没问题,1.4以上的版本全都报错。难道不允许调用接口里面的数组,而只能是简单的数据吗?

经过eclipse3.3 ,netbeans 6.0 正式版, JBuilder2006 测试过,都有该问题~另外,我是从事j2me开发的~~



...全文
89 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
NicholasXu 2007-12-26
  • 打赏
  • 举报
回复
问题已解决~~原因就是上面我说的需要设置一下编译时的目标java版本,针对JBuilder, Eclipse, Netbeans 都有用~只是这三种IDE的设置方法不一样。
JBuilder 2006 在工程属性里面选择 java->将版本都设为jdk-1.3

Eclipse 在设置里的compliance level 设为1.3

Netbeans 在Miscellanous 里的 ant 属性位置,增加一条javac.target = 1.1 即可!

至此主流的三个ide 在开发时遇到的该问题全部解决~~希望对大家,特别是新人有点帮助!
NicholasXu 2007-12-25
  • 打赏
  • 举报
回复
另外不论是什么类型的数组~都会有这个问题。但是netbeans 6.0 + wtk2.5 运行时才不会出这个问题。说的有些乱~貌似是模拟器对应的jdk和ide对应的jdk搭配造成的问题~
NicholasXu 2007-12-25
  • 打赏
  • 举报
回复
我试了一下,j2me 调试调用模拟器运行时会报错。但是j2se 桌面程序没有任何问题~难道是模拟器本身的版本和jdk1.6不兼容造成的?

我用wtk2.0打包并运行同一个程序,会报错。
wtk1.0打包并运行,不报错。

都用Nokia_s60_3.0版模拟器
老紫竹 2007-12-25
  • 打赏
  • 举报
回复
?我这里是JDK 5.0 没有问题啊!
可以正常运行!

lpingxh 2007-12-25
  • 打赏
  • 举报
回复
在我这里能运行。。。
lpingxh 2007-12-25
  • 打赏
  • 举报
回复
接口中的成员变量默认是final & static的,子类里直接用allString[1][2][0][0]=""肯定是不行的

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧