调用自己写的包出错>???(20分)

  • 主题发起人 主题发起人 AK-47
  • 开始时间 开始时间
A

AK-47

Unregistered / Unconfirmed
GUEST, unregistred user!
我的classpath为:
D:/bea/weblogic700/server/lib/CRACK.JAR;
.;D:/bea/weblogic700/server/lib/CRACK.JAR;
.;C:/j2sdk14/lib/tools.jar;C:/j2sdk14/lib/dt.jar;D:/bea/weblogic700/server/lib/classes12.zip;d:/javatest;
=======================================================================
我的程序放(c1.java cm.java)在d:/javatest下
-----------------------------------------------------------------------
我写一个包保存为c1.java:
package a.p1;
public class c1{
public c1()
{
System.out.println("PgTs Constructing");

}
public void f()
{
System.out.println("Package Test");
}
}
---------------------------------------------
和一个调用这个包的一个java程序cm.java
----------------------------------------------
import a.p1.*;
public class cm
{
public static void main(String[] args)
{
c1 a = new c1();


a.f();

}
}
-----------------------------------------------------
编译:
d:/javatest> javac -d . c1.java //这个编译通过。并在javatest/a/p1有c1.class
d:/javatest>javac cm.java //这个编译出错:错误信息如下:
-----------------------------------------------------------------------
cm.java:8: cannot access c1
bad class file: d:/javatest/c1.java
filedo
es not contain class c1
Please remove or make sure it appears in the correct subdirectory of the classp
th.
c1 a = new c1();
^
1 error
-----------------------------------------------------
如果指定它的pakeage目录也出错:
d:/javatest>javac -classpath d:/javatest/a/p1 cm.java

=======================================================================
还有一个怪事,
---------------
1。
如果在cm.java调用包的语句里
import a.p1.*;
-->换成是: import a.p1.c1;就可以编译通过cm.java,为什么会这样我晕啊???????????
2。
如果把c1.java拷到d:/javatest/a/p1下,也就是同c1.class同一上目录下也可以编译通过
以上两点是怎么回事,请大哥们指点。我晕了!!!
 
没人会啊?
 
象我这种菜鸟不会。高手有不屑你的20分。自然每答案了。
建议加分2000,肯定有人解决
 
大哥,我有分就不会出20分了,就只有一点点分,你请将就将就,最多下次开多贴给分~!
 
你有没有把类防在包里面,如建立一个名为a.p1的文件夹,类防在里面,在调用试试
 
xiaotianwangzi:
编译好的包,调用时只需要.class文件就行了吗?是不是这样的?原来的java文件应该放在哪就没有关系了,我只要找到包的class文件就可以?
 
可能是因为你的 cm.java 不声明属于任何包的缘故(属于 java.lang ?)。我没有证实。
你可以在 cm.java 文件的开头添加 package a;
或者 package a.p1;
这样都可以 import a.p1.*;
而不出错。
 
Sterntaler:
我按你的做法编译通过了,就是运行的时候又提示一些找不到类的错误:
D:/javatest>javac -d . cm.java //--->编译通过
D:/javatest>cd a
D:/javatest/a>java cm //-->运行错误
Exception in thread "main" java.lang.NoClassDefFoundError: cm (wrong name: a/cm)
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:502)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:12
3)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:250)
at java.net.URLClassLoader.access$100(URLClassLoader.java:54)
at java.net.URLClassLoader$1.run(URLClassLoader.java:193)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:186)
at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:265)
at java.lang.ClassLoader.loadClass(ClassLoader.java:255)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:315)
-------------------------------------------------------------------------
是什么原因啊?
 
还是包的问题。
-> D:/javatest/a>java cm
这样根据你的import a.p1.*;
java 解释器尝试着在 D:/javatest/a 目录下面找 a/p1/*,全路径就是 d:/javatest/a/a/p1/*
有两种运行方法:
D:/javatest/a>java -classpath D:/javatest cm
或者 D:/javatest>java a.cm
都能运行。
 

Similar threads

后退
顶部