0

我有以下目录布局: program 文件夹包含 java、class 和 pack 文件夹,我当前的位置是 program/java,其中包含 a.java 和 b.java 文件。最初 class 和 pack 不包含任何内容。

b.java

package comm.domm;
public class b
{
    public void bFu()
    {
        System.out.println("b function");
    }
}

一个.java

package com.dom;
import comm.domm.*;
class a
{
    public static void main(String args[])
    {
        (new b()).bFu();
        System.out.println("Utsab");
    }
}

现在,从 program/java 发出以下命令

javac -d ../pack b.java
javac -cp ../pack -d ../class a.java

它在 pack 下创建 comm/domm 并将 b.class 放在 program/pack/comm/domm 中,并在 class 下创建 com/dom 并将 a.class 放在 program/class/com/dom 中

现在从我发布的同一个当前目录中,

java -cp ../class;../pack com.dom.a

哪个不起作用,它可以找到a.class而不是b.class(a.class需要b.class,如源代码中所述)但是在编译a.java时使用

javac -cp ../pack -d ../class a.java

它可以定位到b.class并产生a.class,那么为什么我尝试运行a.class时找不到b.class?怎么能找到?b.class 在编译期间找到但在运行时找不到,为什么?

4

2 回答 2

1

除非这是一个错字

javac -cp ../pack -d ../class b.java

你根本没有编译a.java。如果你有

javac -cp ../pack -d ../class a.java

相反,它对我有用并打印

b function
Utsab

正如预期的那样。

于 2013-09-24T15:35:36.257 回答
0

我的逻辑是正确的,这是环境的问题,在改变环境后它工作得很好,没有任何改变......谢谢大家

于 2013-09-25T11:54:01.990 回答