A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 安宁.沉睡 初级黑马   /  2014-8-15 07:38  /  2240 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 安宁.沉睡 于 2014-8-15 20:34 编辑

为什么定义了一个set calsspath 后不在一个文件夹下的两个调用关系的源文件可以编译,但还是不能运行?
定义一个Tool工具类在Tool文件夹下,定义一个Array主类在Array文件夹下,并在Array主类中调用Tool类的对象。
此时将设置set classpath=Tool文件下  ,     命令路径在Array文件路径下
此时直接编译Array       Tool类和Array类都会被编译
但为什么此时直接运行命令 java Array 却不行

如果将设置set calsspath=.;Tool  的话就可以顺利编译并执行 ,代码逻辑是没错的就是加载路径的问题吧
在路径D:\Tool 下创建Tool.java文件  ,   class Tool{void show(){System.out.println("成功");}}
在路径D:\Array 下创建Array.java文件, class Array{
                                                                            public static void main(String[] args) {
                                                                           Tool tool=new Tool();  tool.show();   }}
在命令符中执行  1. cd D:\Array
                          2. set classpath=D:\Tool
                         3. javac Array.java     //成功编译两文件夹下都生成相应的class文件
                          4.java  Array          //失败  找不到或无法加载到主类 Array
                          5.set classpath=.;D:\Tool
                           6.重新编译,运行都可以


10 个回复

倒序浏览
怎么回事?我也懵了
回复 使用道具 举报
设置classpath就是为类加载器AppClassLoader指定默认加载路径,Java应用类都是由这个类加载器去加载的
回复 使用道具 举报
被编译了证明语法没错,请看看是不是逻辑错误。
回复 使用道具 举报
能被编译,说明java程序可以执行,至于你说不能运行,把运行错误代码发上来看看
回复 使用道具 举报
因为你ARRAY类调用TOOL类,编译器就会去找 然后你calsspath刚好有TOOL类,你确定TOOL目录下只有.JAVA没有.class?
回复 使用道具 举报
按理说你光指定cp是不可能在Array文件夹下找到Tool文件夹下的源文件的,除非你在Tool文件夹下已存在Tool.class。把你的代码中package和import的那部分以及你调用javac和java的完整命令发上来看看。
回复 使用道具 举报
按照路径找类 classpath 就是给出路径 让类加载器去找类
回复 使用道具 举报
菜鸟一号 发表于 2014-8-15 09:19
被编译了证明语法没错,请看看是不是逻辑错误。

不是逻辑问题,应该是加载路径顺序和执行路径顺序不同导致的问题
回复 使用道具 举报
阳光的嘉主角 发表于 2014-8-15 14:52
按照路径找类 classpath 就是给出路径 让类加载器去找类

是的所以,可以成功加载,编译,但是却不能运行不知道为什么
回复 使用道具 举报
Tool前面是不是要加完整的路径呀,盘符等。。。菜鸟同求解答啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马