在C:\ ru \ compscicenter \ java \ stacks>我已经放了
AbstractStack.java
ArrayStack.java
LinkedStack.java
Stack.java
StackTest.java
每个文件的第一个字符串是
package ru.compscicenter.java.stacks;
我的CLASSPATH考试:
C:\ru\compscicenter\java\stacks>echo %CLASSPATH%
.;C:\ru\compscicenter\java\stacks
当我在stacks目录中并尝试编译StackTest时,我没有这样做。 我写的和我得到的是:
C:\ru\compscicenter\java\stacks>javac StackTest.java
StackTest.java:4: error: cannot find symbol
public static void fill(Stack<String> stack){
^
symbol: class Stack
location: class StackTest
StackTest.java:12: error: cannot find symbol
public static <E> void dump(Stack<E> stack){
^
symbol: class Stack
location: class StackTest
StackTest.java:24: error: cannot find symbol
LinkedStack<String> stack = new LinkedStack<String>();
^
symbol: class LinkedStack
location: class StackTest
StackTest.java:24: error: cannot find symbol
LinkedStack<String> stack = new LinkedStack<String>();
^
symbol: class LinkedStack
location: class StackTest
StackTest.java:29: error: cannot find symbol
ArrayStack<String> stack = new ArrayStack<String>(10);
^
symbol: class ArrayStack
location: class StackTest
StackTest.java:29: error: cannot find symbol
ArrayStack<String> stack = new ArrayStack<String>(10);
^
symbol: class ArrayStack
location: class StackTest
6 errors
你能帮我纠正一下吗?
稍后添加:
然后我这样做了:
C:\>javac c:\ru\compscicenter\java\stacks\*.java
Note: c:\ru\compscicenter\java\stacks\ArrayStack.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
C:\>java StackTest
Exception in thread "main" java.lang.NoClassDefFoundError: StackTest (wrong name: ru/compscicenter/java/stacks/StackTest)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
你能帮我一次吗?
答案 0 :(得分:0)
包被解释为相对于当前目录。如果您要指定
package ru.compscicenter.java.stacks;
然后.java
和.class
文件需要位于运行命令的目录ru\compscicenter\java\stacks\
中。在这种情况下,您需要从javac
运行java
和C:\
。
答案 1 :(得分:0)
首先为您的应用定义根目录。将所有内容直接放在c:\中确实不是一个好主意:
c:\myapp
然后为源(.java文件)创建一个目录:
c:\myapp\src
和另一个类(.class文件):
c:\myapp\classes
现在,您的源树应该与您的包树完全匹配,因此您应该在
下拥有源文件c:\myapp\src\ru\compscicenter\java\stacks
因为它们都在ru.compscicenter.java.stacks
包中。
将您自己置于应用的根目录c:\myapp
。 javac编译器期望文件作为参数。并且您希望将已编译的.class文件放在c:\myapp\classes
中。所以你想使用
javac -d classes src\ru\compscicenter\java\stacks\*.java
这将创建一个与c:\ myapp \ classes中的包树完全匹配的文件夹树,其中包含已编译的.class文件。树的根是c:\myapp\classes
,因此您需要添加到类路径以运行应用程序。并且java需要一个完全限定的类名:
java -cp c:\myapp\classes ru.compscicenter.java.stacks.StackTest
或者,使用相对路径,因为你已经在c:\ myapp中了:
java -cp classes ru.compscicenter.java.stacks.StackTest
答案 2 :(得分:0)
虽然compling使用这样的东西 Javac -d。 *的.java 它会自动创建包结构并将类文件放在相应的包中