无法应付包裹

时间:2013-12-22 10:24:42

标签: java classpath

在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)

你能帮我一次吗?

3 个答案:

答案 0 :(得分:0)

包被解释为相对于当前目录。如果您要指定

package ru.compscicenter.java.stacks;

然后.java.class文件需要位于运行命令的目录ru\compscicenter\java\stacks\中。在这种情况下,您需要从javac运行javaC:\

答案 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 它会自动创建包结构并将类文件放在相应的包中