| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1102 人关注过本帖
标题:package问题
只看楼主 加入收藏
tgnian
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2007-4-13
收藏
得分:0 
说明一下   9楼的问题是针对10楼的代码

2007-11-07 01:02
狂放不羁
Rank: 4
等 级:贵宾
威 望:12
帖 子:925
专家分:0
注 册:2007-1-24
收藏
得分:0 
以下是引用tgnian在2007-11-3 14:38:55的发言:

// c05:local:PackagedClass.java
package c05.local;
public class PackagedClass {
public PackagedClass() {
System.out.println(
"Creating a packaged class");
}
}

//Foreign.java
public class Foreign {
public static void main (String[] args) {
PackagedClass pc = new PackagedClass();
}
}
Foreign.java文件和PackagedClass.java文件同在文件夹D:\Java\c05\local里
把package c05.local;注释掉可以编译
为什么加上package c05.local; 后 编译不过
出现错误:
D:\Java\c05\local>javac Foreign.java
Foreign.java:6: 无法访问 PackagedClass
错误的类文件: .\PackagedClass.java
文件不包含类 PackagedClass
请删除该文件或确保该文件位于正确的类路径子目录中。
PackagedClass pc = new PackagedClass();
^
1 错误

D:\Java\c05\local>

这根本就不是classpath的问题。你先编译PackagedClass.java。javac -d . PackagedClass.java.(并且把packageClass.java这个文件从当前路径移到其他路径或者删除)然后再javac Foreign .java,就OK了。

2007-11-07 12:16
tgnian
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2007-4-13
收藏
得分:0 
楼上你试过吗
我按你说的做怎么不行
在D:\Java\c05\local中 javac PackagedClass.java 生成PackagedClass.class
删去PackagedClass.java
在D:\Java\c05\local中 javac Foreign.java 还出现同样错误

2007-11-10 22:25
狂放不羁
Rank: 4
等 级:贵宾
威 望:12
帖 子:925
专家分:0
注 册:2007-1-24
收藏
得分:0 
以下是引用tgnian在2007-11-10 22:25:11的发言:
楼上你试过吗
我按你说的做怎么不行
在D:\Java\c05\local中 javac PackagedClass.java 生成PackagedClass.class
删去PackagedClass.java
在D:\Java\c05\local中 javac Foreign.java 还出现同样错误

要用 javac -d . PackagedClass.java , 或者用你的方法,但是要把packagedClass.class文件移到c05\local目录中。忘记了一点,你要在java目录,不要在c05\local.并且你要导入packagedClass.class类。

[此贴子已经被作者于2007-11-10 23:58:52编辑过]

2007-11-10 23:04
Sieben7
Rank: 2
等 级:论坛游民
帖 子:116
专家分:20
注 册:2007-4-16
收藏
得分:0 
说的很好
QUOTE:
以下是引用hjlwlyhjl在2007-11-4 9:36:58的发言:

    这是由于你对classpath中的 . 理解不深的原因.它表示:当编译某个.java文件时,java虚拟机会搜索该文件所在目录下的所有.class文件以得到在.java文件中所使用的.class文件.而在此所说的所有的.class文件并不是真正意义上的所有.class文件,它有两种含义:1)与.java文件定义了相同包路径的的所有.class文件。比如:正在编译的.java文件中定义在包com.mypack中(即在程序开头定义package com.mypack;),则它只能在当前目录下搜索定义了同一个包(com.mypack)的.class文件。2) 假如A.java中没有定义任何包,并且它被放到了某个.java文件所定义的包路径中。比如把A.java放到了1)中定义的com\mypack中,此时的A只能通过classpath中的 . 搜索com\mypack目录下所有未定义任何包的.class文件,而不能搜索到定义了com.mypack的.class文件了。
    有了上面的解释后,再回来看看你的程序:
    1) 你将PackagedClass和Foreign都定义在包c05.local中(即都定义了"package c05.local;"语句)时:这就是上面介绍的第一种情况了,由于两个.java文件都定义了同一个包中,所以在编译的时候,Foreign.java能够根据classpath中的 . 找到PackagedClass.class文件(前提是PackagedClass.java必须先被编译PackagedClass.class文件),所以编译能够通过。
    2)假如你在PackagedClass.java中定义了"package c05.local;"语句,但没有在Foreign.java定义"package c05.local"语句,并且把它们都放到了c05.local(表示相对目录)目录下时,这就是上面所说的第二中情况了。也就是说,Foreign.java文件只能通过classpath中的 . 搜索到所有的没有任何包定义的.class文件了,所以它就不能搜索到PackageClass.class文件,所以会报错。
    
    解决方法:
    1)就像上面的第一种情况,在两个源程序中都定义同一个包。
    2)就是上面说的第二种情况,即在PackagedClass.java中定义包c05.local,而在Foreign.java中不定义任何包,此时应该在Foreign中添加这么一句:import c05.local; ,再将c05所在目录添加到classpath中,再编译也就没问题了。




2007-11-11 19:56
快速回复:package问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.034255 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved