java高手进 生成Class问题

来源:百度知道 编辑:UC知道 时间:2024/05/25 05:06:09
本人初学JAVA,
希望高手赐教

本人用反汇编软件 将一堆.class文件,转化成.JAVA文件后,

然后我用javac xxx.java 转化时

假如我用命令 javac b.java

出现错误如下:

Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.

C:\Documents and Settings\Administrator>D:

D:\>javac b.java
b.java:19: cannot resolve symbol
symbol : variable _fldelse
location: class a.b
_fldelse = i;
^
b.java:20: cannot resolve symbol
symbol : variable _fldtry
location: class a.b
_fldtry = j;
^
b.java:21: cannot resolve symbol
symbol : variable _fldnew
location: class a.b
_fldnew = new Rectangle();
^
b.java:23: cannot resolve symbol
symbol : variable _fldif
location: class a.b
_fldif = component.createImage(_fldelse, _fldtry);
^
b.java:23: cannot resolve symbol
symbol : variable _fld

首先汗下楼主初学Java就敢反汇编别人程序。究竟是勇于尝试呢还是不自量力呢?这个问题本来就是矛盾的。。。。。

我给你举一个简单的例子吧,如果A类是这样的:
Class A {
B b = new B();
}
而B类的定义在同一个包中:
Class B {}

如果你直接编译A,会报找不到B类的错,因为此时在类路径里面没有发现B类的class文件。如果先编译B,生成了B的class文件,再编译A,就不会找不到B类了。但问题是,如果有一大堆文件,你不知道该先编译哪个后编译哪个呢?或者两个类根本就是互相使用,不论先编译哪个都会出错呢?

有两个解决方法:
1.原始解决方法。javac 可以接受多个文件,比如:
javac A.java B.java
这样就不会出错了。

2.即使用上面的解决方法,在文件很多的时候也是非常累的。所以一般用一个IDE(集成开发环境),把工程配好,点一个“Build”,就全部编译了。至于选用哪个集成开发环境以及如何使用你可以自己去搜索一下或参考一些书籍。常用的有:JBuilder、Eclips、JCreater、IntelliJ IDEA。

但是,还有一些情况会造成你遇到的这种情况,比如楼上几位提到的,程序可能用到了其他jar包里面的资源而你没有搞到。如果是这种情况的话你自己就要确保你搞到了人家全套可运行的源代码,并且把人家引用的jar文件也加入到了你的CLASSPATH中。

你的class文件之间一定有关系,所有的class文件在一个文件夹里 也就是包
你把反编译过来的java文件 放在这个文件包外 再编译 这样他就可以调用包里需要的资源了 这样应该就没错了 还有 他需要什么额外的包要看你的具体程序了 比如jar包

你加我MSN fancypupu@hotmail.com 把原文件发给我 我给你调试。

没有原程序不知道这个变量在哪定义的 有兴趣的就加我

初学你去反编人家的程序做什么哦?

一般发行版本都经过混淆了,看得你会一头雾水的.呵呵.....