package的问题,真正关键的问题 你好像把my.test写成类了吧,如果你用Package.getPackage("my");再试试还有你的classpath设的对不对 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Hi, biti_9512207你需要保证在调用Package.getPackage("my.test")之前, 曾经至少创建过一个my.test某一个class的实例(即便该实例已被回收). 看看java.lang.Package的getPackage(String name)的源代码: public static Package getPackage(String name) { ClassLoader l = ClassLoader.getCallerClassLoader(); if (l != null) { return l.getPackage(name); // 借助classLoader的时候 } else { return getSystemPackage(name); // 显式调用的时候 } }对你所碰到的情况我想是在显式调用的时候吧(其实用classloader的情况类似)? Package类里用一个HashMap来维护system packages, 默认情况下系统会自动加下面的package(相信你也能明白为什么java.lang里的类可以直接引用而不需要事先import):0 : package java.net, Java Platform API Specification, version 1.31 : package sun.io, Java Platform API Specification, version 1.32 : package sun.net.www, Java Platform API Specification, version 1.33 : package com.sun.rsajca4 : package java.security.cert, Java Platform API Specification, version 1.35 : package java.lang, Java Platform API Specification, version 1.36 : package sun.security.provider, Java Platform API Specification, version 1.37 : package java.io, Java Platform API Specification, version 1.38 : package sun.net.www.protocol.jar, Java Platform API Specification, version 1.39 : package java.security, Java Platform API Specification, version 1.310 : package sun.security.action, Java Platform API Specification, version 1.311 : package java.util, Java Platform API Specification, version 1.312 : package sun.misc, Java Platform API Specification, version 1.313 : package sun.net.www.protocol.file, Java Platform API Specification, version 1.314 : package java.lang.reflect, Java Platform API Specification, version 1.315 : package sun.security.util, Java Platform API Specification, version 1.316 : package java.lang.ref, Java Platform API Specification, version 1.3当然还有可能更多, 但那很可能是因为你曾经创建过一些其它包中包含的类的实例 :) No这个问题和ClassLoader有关.这是一个关键的问题:想象一下:当你需要通过类来了解它在那个包中时???而这种需求当你在做一个结构控制时,又是必需的.哎........意会言传................. To Dureek我的上一段话不是针对你的.很高兴你了解我的意思.我有这几个问题:1 你是否试过?2 你所说的显示调用是什么意思?3 可否告诉我顺序的出处4 我还是没有成功 :( faint ... 意会言传失败 :(举例子吧 ...我的意思是这样的, 假设你的my.test包中有MyClass这个类 ......MyClass myClass = new MyClass(); //创建一个实例...Package pkg = Package.getPackage("my.test");这个时候的pkg就不是null了 ...好了, 换你举例子吧, 说说结构控制, 我不懂:p 你试过吗我试了,不行.MyClass myClass = new MyClass();Package.getPackage("my.test") == null is true;myClass.getPackage() == null is true; 补充:java中的类是动态加载的, 除去必要的类以外, 其它都是在需要的时候才加载的, 而这在事实上也就决定了系统中有哪些package ... 对每一个classloader(可看做一个namespace), 它所维护的packages列表完全提取自它的生命周期中加载过的所有的类 ... 所以, 你会发现虽然你在运行程序时间虽然在classpath中包含了my.test中所有的类, 但如果未在运行中生成过任何my.test中的类的实例, 则system classloader中的packages列表中将不会出现my.test包 ... faint ... 我试过的啊 ... 55555555 ... 老大啊, 我把代码给你吧 ...[ MyClass.java ]-----------------------------package my.test;public class MyClass { public MyClass() { System.out.println("MyClass is loaded!"); }}[ Untitled1.java ]-----------------------------import my.test.*;public class Untitled1 { public Untitled1() { } public static void main(String[] args) { try { //Untitled1 untitled11 = new Untitled1(); MyClass m = new MyClass(); Package p = Package.getPackage("my.test"); if (p != null) System.out.println(p); } catch (Exception e) { e.printStackTrace(); } }}再试试? 我这儿的结果是:--MyClass is loaded!package my.test 我验证正确MyClass is loaded!package my.test Windows 2000 Professional + JBuilder 4.0(J2SE 1.3.0 with Hotspot Client VM) ... 我知道了.你用的是jdk1.3我用的是jdk1.2我有什么办法可以在1.2下做出同样的效果吗? 奇怪,我的也不行,我的是122,VAJ带的…… 在VAJ下不行(122的JDK),用130的JDK就OK了……看来是JDK的问题…… 正在试 ... 不过那个确实在jdk 1.2.2下不行, 呵呵 ... 因为1.3的ClassLoader较1.2不同, 手头没1.2的源代码, 得花些时间 :~( http://developer.java.sun.com/developer/bugParade/bugs/4256589.html 作为了解, 还可以去看看:http://java.sun.com/products/jdk/1.2/docs/guide/versioning/spec/VersioningSpecification.html和http://java.sun.com/j2se/1.3/docs/guide/versioning/spec/VersioningSpecification.html 我去4256589看了,感觉1.2下也不应返回为null呀而只是get一些信息时为nullBTW:请教老兄从何处获得的bug号. faint ... sun的站点上有bug database, search一下不就 ...那上面sun的两个文章你看过了吗? thank you!1.2下试的有结果吗? 狂分特,这java烂成这样,还跨个p平台啊 ObjectInputStream readObject 连续读对象的问题 正则表达式问题 八个J2EE的高级群,按层次划分,共享教程代码,期待各位朋友加入(需考试) 如何对成对的单词计数 在java里面如何计算日期 怎样创建jar文件?(要能双击运行的) 在applet中如何监听vrml上的鼠标点击事件!!! java关于null问题 关于Socket通信问题 高分请教!每人给5分先! java程序问题 请教一个url中文的问题
public static Package getPackage(String name) {
ClassLoader l = ClassLoader.getCallerClassLoader();
if (l != null) {
return l.getPackage(name); // 借助classLoader的时候
} else {
return getSystemPackage(name); // 显式调用的时候
}
}
对你所碰到的情况我想是在显式调用的时候吧(其实用classloader的情况类似)? Package类里用一个HashMap来维护system packages, 默认情况下系统会自动加下面的package(相信你也能明白为什么java.lang里的类可以直接引用而不需要事先import):
0 : package java.net, Java Platform API Specification, version 1.31 : package sun.io, Java Platform API Specification, version 1.32 : package sun.net.www, Java Platform API Specification, version 1.33 : package com.sun.rsajca4 : package java.security.cert, Java Platform API Specification, version 1.35 : package java.lang, Java Platform API Specification, version 1.36 : package sun.security.provider, Java Platform API Specification, version 1.37 : package java.io, Java Platform API Specification, version 1.38 : package sun.net.www.protocol.jar, Java Platform API Specification, version 1.39 : package java.security, Java Platform API Specification, version 1.310 : package sun.security.action, Java Platform API Specification, version 1.311 : package java.util, Java Platform API Specification, version 1.312 : package sun.misc, Java Platform API Specification, version 1.313 : package sun.net.www.protocol.file, Java Platform API Specification, version 1.314 : package java.lang.reflect, Java Platform API Specification, version 1.315 : package sun.security.util, Java Platform API Specification, version 1.316 : package java.lang.ref, Java Platform API Specification, version 1.3当然还有可能更多, 但那很可能是因为你曾经创建过一些其它包中包含的类的实例 :)
这个问题和ClassLoader有关.
这是一个关键的问题:
想象一下:当你需要通过类来了解它在那个包中时???
而这种需求当你在做一个结构控制时,又是必需的.哎........意会言传.................
我的上一段话不是针对你的.
很高兴你了解我的意思.
我有这几个问题:
1 你是否试过?
2 你所说的显示调用是什么意思?
3 可否告诉我顺序的出处
4 我还是没有成功 :(
举例子吧 ...
我的意思是这样的, 假设你的my.test包中有MyClass这个类 ...
...
MyClass myClass = new MyClass(); //创建一个实例
...
Package pkg = Package.getPackage("my.test");
这个时候的pkg就不是null了 ...好了, 换你举例子吧, 说说结构控制, 我不懂:p
我试了,不行.
MyClass myClass = new MyClass();
Package.getPackage("my.test") == null is true;
myClass.getPackage() == null is true;
java中的类是动态加载的, 除去必要的类以外, 其它都是在需要的时候才加载的, 而这在事实上也就决定了系统中有哪些package ... 对每一个classloader(可看做一个namespace), 它所维护的packages列表完全提取自它的生命周期中加载过的所有的类 ... 所以, 你会发现虽然你在运行程序时间虽然在classpath中包含了my.test中所有的类, 但如果未在运行中生成过任何my.test中的类的实例, 则system classloader中的packages列表中将不会出现my.test包 ...
[ MyClass.java ]
-----------------------------
package my.test;public class MyClass { public MyClass() {
System.out.println("MyClass is loaded!");
}
}[ Untitled1.java ]
-----------------------------
import my.test.*;public class Untitled1 { public Untitled1() {
}
public static void main(String[] args) {
try {
//Untitled1 untitled11 = new Untitled1();
MyClass m = new MyClass();
Package p = Package.getPackage("my.test");
if (p != null)
System.out.println(p);
} catch (Exception e) {
e.printStackTrace();
}
}
}再试试? 我这儿的结果是:
--
MyClass is loaded!
package my.test
MyClass is loaded!package my.test
我用的是jdk1.2
我有什么办法可以在1.2下做出同样的效果吗?
http://java.sun.com/products/jdk/1.2/docs/guide/versioning/spec/VersioningSpecification.html
和
http://java.sun.com/j2se/1.3/docs/guide/versioning/spec/VersioningSpecification.html
感觉1.2下也不应返回为null呀
而只是get一些信息时为nullBTW:
请教老兄从何处获得的bug号.
那上面sun的两个文章你看过了吗?
1.2下试的有结果吗?