大家.
我在arch linux上使用openjdk-7.我最近开始学习Java,遇到了这样的问题:
我在/home/hqwrong/Code/java/mew/Mouth.java创建了一个文件:
package mew;
public class Mouth{
public static void main(String argv[]){
pickle.Say s = new pickle.Say();
}
}
Run Code Online (Sandbox Code Playgroud)
另一个在/home/hqwrong/Code/java/pickle/Say.java:
package pickle;
public class Say{
public Say(){
System.out.println("Say");
}
}
Run Code Online (Sandbox Code Playgroud)
我将Say.java编译为Say.class,使用:
$ cd /home/hqwrong/Code/java/pickle
$ javac Say.java
Run Code Online (Sandbox Code Playgroud)
这是成功的.
我编译了Mouth.java,使用:
$ cd ../mew
$ export CLASSPATH=.:/home/hqwrong/Code/java/
$ javac Say.java
Run Code Online (Sandbox Code Playgroud)
没有错误消息.
但在我输入之后:
$ java说
我有:
Exception in thread "main" java.lang.SecurityException: Prohibited package name: java.mew
at java.lang.ClassLoader.preDefineClass(ClassLoader.java:649)
at java.lang.ClassLoader.defineClass(ClassLoader.java:785)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:472)
Run Code Online (Sandbox Code Playgroud)
我使用时也一样:
$ java -cp $CLASSPATH Say
Run Code Online (Sandbox Code Playgroud)
我需要你的帮助吗?
由于还没有好的答案,我会发布我的.
首先,您应该为您的类和源提供单独的文件夹.我建议java/src您使用您的来源和java/classes课程.由于类存储在classes文件夹中,因此应该在类路径中.
然后,源的文件夹树应与您的包树匹配.这意味着类mew.Mouth必须包含在package mew文件java/src/mew夹中的Mouth.java文件中定义的行.
要编译类,请将您放在java/src目录中,然后使用以下命令:
javac -d ../classes mew/Mouth.java pickle/Say.java
Run Code Online (Sandbox Code Playgroud)
编译器将自动生成与classes目录中的包结构匹配的文件夹结构.如果在源代码树中进行结构修改,只需删除classes文件夹中的所有内容,然后重新编译所有内容.
要运行类,必须引用其完全限定名称.包含包树(java/classes文件夹)的文件夹必须位于类路径中.一旦完成,从任何地方,您都可以使用
java mew.Mouth
Run Code Online (Sandbox Code Playgroud)
请注意,正如您所发现的那样java,javax包和包是保留的.您不能将它们用于您自己的课程.
| 归档时间: |
|
| 查看次数: |
5403 次 |
| 最近记录: |