今天碰到的一个很多人都说是第一次碰到,而且想都没想到的问题,发出来共享一下

shine333 2004-07-21 12:06:26
大致情况如下

public class A {
public void a() {
B b = new B();
b.b("x");
}
}

public class B {
public void b(String x) {
}
}

其中B.b(String)是新加上去的。再加上去之前,A里面的代码被comment了,
加好方法,去掉注释后,JBX编译A(顺便连B一同编译了),没抱错,发布,运行,结果抛了一个错,大意是java.lang.Error: Unresolved compliation problem: b(String) not defined in type B

开始以为是NoSuchMethod,便去重新编译B,再deploy-test,错误依旧,感到奇怪,再去反编译运行环境里的class,没错,b方法赫然在目。Make整个工程都没用。察看classpath也没有发现什么名堂,如此反复,郁闷了快一个小时之后,突然想到是不是A有问题,rebuild A,重新测试,竟然一切OK!
...全文
481 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
梦想家起飞 2004-07-22
  • 打赏
  • 举报
回复
jdk每个版本的升级都会增加一些新功能并且解决一些bug,大约可以从release声明里发现一些有用的东西。jb9自带的jdk版本是1.4.1_02-b06。

这地球上大约没有完美的编译器,偶尔出点小问题还算正常的。:)
zslhfdyx 2004-07-22
  • 打赏
  • 举报
回复
mark...
shine333 2004-07-22
  • 打赏
  • 举报
回复
虽然还是没能找到原因,也没能再现这个问题,
但依然感谢楼上各位
shine333 2004-07-22
  • 打赏
  • 举报
回复
>Eclipse里应该是警告,你的方法b什么也没有执行之类的。例如a=a它就会给个警告,感觉不错。

不是这种Warning,我上面只是一个Sample,正式的不便发表,肯定没有冗余部分
shine333 2004-07-22
  • 打赏
  • 举报
回复
>有时候就是编译问题,或者是他还是用原来的class

当然不是原来的class,原来的从来没有和B打过交道
shine333 2004-07-22
  • 打赏
  • 举报
回复
>另外,不一定和jdk没关系。jb用的是borland自己的jdk,和公版的并不一样,你可以在project properties里面换成sun公版的jdk看看。

JBuilder里面代的也是sun的jdk有什么不同呢?

>还有,jb在jdk编译之前还有许多检查和准备工作,你可以看看project peoperties里面有关build的选项,改改看是否有变化,呵呵。。:)

当然没变过了
shine333 2004-07-21
  • 打赏
  • 举报
回复
it's compilation not compliation
shine333 2004-07-21
  • 打赏
  • 举报
回复
顺便提一句,在JBX编译通过的同时,我用Eclipse 3.0看A,发现b.b("x");有Error(或者Warning一时记不清了),因为对Eclipse不是太熟,况且JBX没有报任何错误,所以也没在意。

请问哪位知道这个Unresolved compliation problem到底是个啥玩意儿,怎么回事?
shine333 2004-07-21
  • 打赏
  • 举报
回复
up
susamcj 2004-07-21
  • 打赏
  • 举报
回复
学习中……
hl_longman 2004-07-21
  • 打赏
  • 举报
回复
up
simonhappy 2004-07-21
  • 打赏
  • 举报
回复
Eclipse里应该是警告,你的方法b什么也没有执行之类的。例如a=a它就会给个警告,感觉不错。
遇到怪问题,先全部重新编译,然后换JDK,然后换操作系统,然后??
ineedtostudy 2004-07-21
  • 打赏
  • 举报
回复
up
haoyougen23 2004-07-21
  • 打赏
  • 举报
回复
的确,同意楼上的说法,我以前用jb9时也是的,明明是按书上的源代码输入的,就是编译有错,结果换jb8就没问题,再换jb9后结果就可以了,真是晕啊!:0
wyfsnn 2004-07-21
  • 打赏
  • 举报
回复
public class A {
public void a() {
B b = new B();
b.b("x");
}
}

class B {
public void b(String x) {
}
}
blasterboy 2004-07-21
  • 打赏
  • 举报
回复
有时候就是编译问题,或者是他还是用原来的class,刷新一下,或者重新启动一下jbuider就可以
moonyuezhao 2004-07-21
  • 打赏
  • 举报
回复
以前用Eclipse也碰到过,一个类明明有问题,但还能编译生成 class 文件,并且当另外一个类调用此有问题的类时,只要不是调用此类中有问题的那个方法,就可以顺利运行。原因不知道,可能这些工具的内部编译方式和用javac不同吧
梦想家起飞 2004-07-21
  • 打赏
  • 举报
回复
字面上理解,是“未解决的编译问题”。有没有试着给b方法填充上方法体看看?

另外,不一定和jdk没关系。jb用的是borland自己的jdk,和公版的并不一样,你可以在project properties里面换成sun公版的jdk看看。

还有,jb在jdk编译之前还有许多检查和准备工作,你可以看看project peoperties里面有关build的选项,改改看是否有变化,呵呵。。:)
stonecsdn 2004-07-21
  • 打赏
  • 举报
回复
呵呵,jb经常会出现一些莫奇妙明的问题
rainworm 2004-07-21
  • 打赏
  • 举报
回复
我觉得这就是bug,在jb8里这样莫名其妙的bug我经常碰见
加载更多回复(2)

62,615

社区成员

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

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