编译总提示找不到符号,搞了一周多,快疯了

08-06-18 btking
一个web项目,用tomcat做服务器。

1.有全部类的.class文件,要对其中的一个类BaseSIPProxy.java进行修改,程序文件的路径G:\ROOT\WEB-INF\classes\com\sipserver\sip\proxy\BaseSIPProxy.java,先用反编译软件把整个程序的全部类文件反编译了,现在还没有对BaseSIPProxy.java进行修改,只是试着把它编译回去,就报出了这些错误。例如:

ROOT\WEB-INF\classes\com\sipserver\sip\proxy\BaseSIPProxy.java:8: 找不到符号

符号: 类 LifeCycle

位置: 软件包 com.sipserver

import com.sipserver.LifeCycle;

ROOT\WEB-INF\classes\com\sipserver\sip\proxy\BaseSIPProxy.java:9: 软件包 com.sipserver.model 不存在

import com.sipserver.model.Config;

2.只要是import了程序类的类文件,编译时都会报错找不到import的那些类,找不到符号。

3.今天试着编译了一个只import了类库的类文件,编译成功,并且替代以前的同名class文件,

程序运行时没有报错

4.自己写了一个test类,只调用了一个程序类,编译时也是同样的错误,报找不到符号

freebox
2008-06-19 09:30
可能是某些类在jar里您没有加入类路径。

有个我认为比较有效的方式来查找这些类,用rar打开任意一个jar文件,向上一级目录,然后用rar的搜索功能查找缺失的类,例如“LifeCycle”(不确定的话可加通配符)。找到后把这个jar加到编译库里就可以了。

skycity220
2008-06-19 10:26
个人觉得你原先那个jar要关联你这个编译的.所以得在classpath中加入这个jar的路径

btking
2008-06-20 11:29
1.LifeCycle的路径:G:\ROOT\WEB-INF\classes\com\sipserver\LifeCycle.java

2.jar的路径:G:\ROOT\WEB-INF\lib里面放着程序运行需要的所有jar

3.把LifeCycle.java编译成LifeCycle.class,替代原来的LifeCycle.class,程序能正常运行

4.即使把BaseSIPProxy.java编译成BaseSIPProxy.class,替代原来的BaseSIPProxy.class,启动tomcat时会报错,说BaseSIPProxy里的类cannot be resolved to a type。这个可能是因为反编译的文件里面有很多错,所以虽然编译成了class,但是也不能让程序正常运行,不知道我的想得对不对?

freebox
2008-06-20 13:15
BaseSIPProxy里是否有内部类需要一同编译但没反编译出来?或是被增强过的类(这个我只会用,不懂原理)反编译时不正确?

btking
2008-06-20 14:28
是反编译完了的,一个一个文件反编译的,用的DJ Java Decompiler3.9.9.1

但是不知道它是否加密或混淆

用JCreator新建了一个工程,在工程里按照程序的结构重新建每个类,这样编译BaseSIPProxy依然报找不到符号,软件包不存在

freebox
2008-06-20 15:12
找不到符号的那个类可能在jar里,要加进JC的编译库路径。

JC好像默认是单个编译,互相引用的类编译时要用联合编译或换个聪明点的编译器。

btking
2008-06-20 16:23
在eclipse里也一样,import的前面都是报错的红点,但是发现了很奇怪的一个事情,

import com.sipserver.service.*;

import com.sipserver.sip.*;

前面没有报错的符号,而

import com.sipserver.LifeCycle;

import com.sipserver.model.Config;

import com.sipserver.model.SystemConfigs;

import com.sipserver.sip.message.SIPUDPMessageProcessor;

import com.sipserver.sip.proxy.core.Handler;

import com.sipserver.sip.proxy.core.SipListener;

import com.sipserver.sip.proxy.core.SipRequest;

import com.sipserver.sip.proxy.core.SipResponse;

import gov.nist.javax.sip.message.SIPRequest;

却报错,但是只要把每条import的最后改成*,就不会报错了

freebox
2008-06-20 16:44
结果呢?通过没有?要是通过就不用管了,如果还没通过的话,这个问题对我来说就太高深了,应该找个比我聪明点的人来咨询。

careprad
2008-07-24 17:26
不会是乱码的问题吧

猜你喜欢