当前位置: 代码迷 >> Java相关 >> package问题
  详细解决方案

package问题

热度:238   发布时间:2007-11-03 14:38:55.0
package问题

// 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>

搜索更多相关的解决方案: package  

----------------解决方案--------------------------------------------------------
以下是引用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>

把红色的去掉就行 ,不是包的问题!


----------------解决方案--------------------------------------------------------
sorry 你说的是不是把public去掉
但我试过还是不行
----------------解决方案--------------------------------------------------------
javac -d d:\ PackagedClass.java
----------------解决方案--------------------------------------------------------
以下是引用tgnian在2007-11-3 18:20:06的发言:
sorry 你说的是不是把public去掉
但我试过还是不行

怎么我的可以,是不是你的环境变量设错了???


----------------解决方案--------------------------------------------------------

这是由于你对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中,再编译也就没问题了。


----------------解决方案--------------------------------------------------------
以下是引用canyue在2007-11-3 22:14:58的发言:

怎么我的可以,是不是你的环境变量设错了???

classpath=.;D:\java\jdk1.6.0_02\lib;D:\java\jdk1.6.0_02\lib\tools.jar;D:\java


----------------解决方案--------------------------------------------------------
以下是引用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中,再编译也就没问题了。

解决方法 2)中在什么路径编译
D:\java\c05\local>javac Foreign.java
还是编译不了
----------------解决方案--------------------------------------------------------

d:\java\c05\local目录下有PackagedClass.java Foreign.java
为什么编译不了,
D:\java\c05\local>javac Foreign.java
Foreign.java:6: 无法访问 PackagedClass
错误的类文件: .\PackagedClass.java
文件不包含类 PackagedClass
请删除该文件或确保该文件位于正确的类路径子目录中。
PackagedClass pc = new PackagedClass();
^
1 错误

还有为什么
D:\java\c05>javac local\Foreign.java
D:\java>javac c05\local\Foreign.java
D:\>javac java\c05\local\Foreign.java
这几句能编译成功,而

D:\java\c05\local>javac Foreign.java
编译不了
D:\>set classpath
classpath=.;D:\java\jdk1.6.0_02\lib;D:\java\jdk1.6.0_02\lib\tools.jar;D:\java


----------------解决方案--------------------------------------------------------

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

//c05:local:Foreign.java
import c05.local.*;
public class Foreign {
public static void main (String[] args) {
PackagedClass pc = new PackagedClass();
}
}


----------------解决方案--------------------------------------------------------
  相关解决方案