jdk1.4之后如果不打包很有可能是找不到类的如果打了包就很简单了
只要把两个类的目录结构的根目录放在一起就可以找到
比如
myPackage
pack1
xxx
MyClass1
pack2
yyy
MyClass2
分别有两个包pack1.xxx和pack2.yyy
他们的根路径在一起
相互调用import就能找到
只要把两个类的目录结构的根目录放在一起就可以找到
比如
myPackage
pack1
xxx
MyClass1
pack2
yyy
MyClass2
分别有两个包pack1.xxx和pack2.yyy
他们的根路径在一起
相互调用import就能找到
解决方案 »
- 来个题目,提提神
- 关于Java类之间的数据共享
- 网络编程错误
- 请分析一下这段小代码
- [求助]java调用MFC动态库问题
- 怎样关闭HttpsURLConnectioin?
- 救命 为啥删除不了文件?
- WIN2000 下如何设置环境变量???(急!在线等候)
- 谁用过sun.net.smtp.SmtpClient来发过mail啊,本人只是想发邮件而已,并不想登录,100分相送
- 我在autoexec.bat中设置set classpath=c:\jdk1.3,是不是.java文件都必须在c:\jdk1.3下编辑和编译并且运行?
- 线程的问题
- Container.add(Container.java:518) 异常
而直接使用的话,编译器会报错:cannot resolve symbol联想到除了直接用new的方式创建一个对象外
还可以通过Class.forName().newInstance()的方式获取类的实例
于是写了一个测试例子如下://MyShow.java
//用以被调用的不带包结构定义的类
public class MyShow {
public String show() {
return "None Package";
}
}
//MyClass.java
//用以测试调用的类
package com.zcjl.test.base;import java.lang.reflect.Method;
public class MyClass {
public static void main(String[] args) {
try {
Object obj = Class.forName("MyShow").newInstance();
Class clazz = obj.getClass();
Method method = clazz.getMethod("show", null);
String returnValue = (String) method.invoke(obj, null);
System.out.println(returnValue);
} catch (Exception e) {
e.printStackTrace();
}
}
}bingo!编译通过,运行MyClass.class,控制台返回
None Package
我用c写的动态链接库,类名在编译的时候用javah -jni的时候就写死在.h和.c文件里了
现在我这个动态链接库别人包里的类要调用,有什么办法?
因为他实现的原理是用ClassLoader在类路径里面搜索class文件
确实不错
Exception in thread "main" java.lang.NoClassDefFoundError: MyClass (wrong name: com/MyClass)
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:539)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:251)
at java.net.URLClassLoader.access$100(URLClassLoader.java:55)
at java.net.URLClassLoader$1.run(URLClassLoader.java:194)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:187)
at java.lang.ClassLoader.loadClass(ClassLoader.java:289)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:274)
at java.lang.ClassLoader.loadClass(ClassLoader.java:235)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)
前提是,要么没有设定classpath变量,要么classpath中得包含"."这个路径