所以我开始使用Java。我目前在Ubuntu平台上。我安装了jdk,它在初始阶段工作正常。然后我转向“访问控制”一章,开始谈论CLASSPATH和罐子。
这就是我所做的。
在我的桌面上,我创建了一个文件夹A
,然后我创建了文件Aa.java
package home.kraken.Desktop.A;
class Aa{
public doSome(){
System.out.println("AA");
}
}
在桌面上我在
中有另一个文件夹B
和文件Bb.java
package home.kraken.Desktop.B;
import home.kraken.Desktop.A.*;
class Bb{
public static void main(String[] args){
Aa a = new Aa();
a.doSome();
}
}
现在,当我运行Bb.java时,我收到错误,它无法找到Aa。
好的,我知道CLASSPATH是某种变量,它提供了搜索其他类的位置。现在这是我的问题
import RELATIVE_ADDRESS_TO_DESKTOP
?感谢。
修改
所以这就是我做的事情
我的classpath原来是空的,所以我做了
export CLASSPATH="$CLASSPATH:/home/kraken/Desktop"
现在在Inside文件夹Desktop / A中,我有
package A;
public class Aa{
public void doSome(){
System.out.println("AA");
}
}
在文件夹Desktop / B中,我有
package B;
import A.*;
class Bb{
public static void main(String[] args){
Aa a = new Aa();
a.doSome();
}
}
现在,我做javac Aa.java
javac Bb.java
当我做java Bb
[内部文件夹桌面/ B运行程序时,它说]
线程“main”中的异常java.lang.NoClassDefFoundError:Bb(错误的名称:B / Bb) at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:634) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) at java.net.URLClassLoader.defineClass(URLClassLoader.java:277) at java.net.URLClassLoader.access $ 000(URLClassLoader.java:73) 在java.net.URLClassLoader $ 1.run(URLClassLoader.java:212) at java.security.AccessController.doPrivileged(Native Method) 在java.net.URLClassLoader.findClass(URLClassLoader.java:205) at java.lang.ClassLoader.loadClass(ClassLoader.java:321) 在sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:294) at java.lang.ClassLoader.loadClass(ClassLoader.java:266) 找不到主要类:Bb。程序将退出。
这里发生了什么?
编辑2
当我java B.Bb
[内部文件夹B.Bb]时打印出AA
。
如果有人能解释发生了什么事?
答案 0 :(得分:2)
1)我怎么知道我的CLASSPATH是什么?
这是一个系统环境变量。在UNIX / Linux上,键入“echo $ CLASSPATH”以查看它的设置。
2)在第一个声明中,我写了完整的地址 它所在的文件夹。即使那样它也找不到它?我的项目必须是 仅由CLASSPATH指出?
这是一个包名。它告诉Java在类路径中查看的位置。通常,包名称与文件的绝对路径不匹配。例如,假设我的文件系统/ user / local / com / stackoverflow / foo上有一个类。 Java需要将类路径设置为/ usr / local,因此它知道在哪里查找类。类似地,该文件可能在jar中,而classpath表示要查看jar。
3)说我的CLASSPATH指向桌面[即我为每一个设置了CLASSPATH的值 我创建的文件,如果我要导入其他类,那么我将导入 RELATIVE_ADDRESS_TO_DESKTOP?
是。您的CLASSPATH指向包语句的“根”。
4)如何设置CLASSPATH的值?
export CLASSPATH =“$ CLASSPATH:textToAddToClasspath”
5)什么是jar。我知道它是Class FIles的集合,但我是明确的 使用某个命令制作一个jar文件或......它是如何工作的?
是的,jar是类文件的集合。您可以使用“jar -cvf jarname.jar * .class”或类似的
创建它答案 1 :(得分:0)
将Aa.java和Bb.java放在同一个文件夹中。 我相信JDK包是默认设置的。 因此,如果您将这两个文件放在同一个文件夹中,那么您只需将类路径设置为您拥有所有内容的文件夹。
java -classpath /home/user/myprogram org.mypackage.AA.java
或者你的文件结构是什么^^
这应该让你的程序正常工作