你好像把my.test写成类了吧,如果你用Package.getPackage("my");再试试
还有你的classpath设的对不对

解决方案 »

  1.   

    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当然还有可能更多, 但那很可能是因为你曾经创建过一些其它包中包含的类的实例 :)
      

  2.   

    No
    这个问题和ClassLoader有关.
    这是一个关键的问题:
    想象一下:当你需要通过类来了解它在那个包中时???
    而这种需求当你在做一个结构控制时,又是必需的.哎........意会言传.................
      

  3.   

    To Dureek
    我的上一段话不是针对你的.
    很高兴你了解我的意思.
    我有这几个问题:
    1 你是否试过?
    2 你所说的显示调用是什么意思?
    3 可否告诉我顺序的出处
    4 我还是没有成功 :(
      

  4.   

    faint ... 意会言传失败 :(
    举例子吧 ...
    我的意思是这样的, 假设你的my.test包中有MyClass这个类 ...
    ...
    MyClass myClass = new MyClass(); //创建一个实例
    ...
    Package pkg = Package.getPackage("my.test");
    这个时候的pkg就不是null了 ...好了, 换你举例子吧, 说说结构控制, 我不懂:p
      

  5.   

    你试过吗
    我试了,不行.
    MyClass myClass = new MyClass();
    Package.getPackage("my.test") == null is true;
    myClass.getPackage() == null is true;
      

  6.   

    补充:
    java中的类是动态加载的, 除去必要的类以外, 其它都是在需要的时候才加载的, 而这在事实上也就决定了系统中有哪些package ... 对每一个classloader(可看做一个namespace), 它所维护的packages列表完全提取自它的生命周期中加载过的所有的类 ... 所以, 你会发现虽然你在运行程序时间虽然在classpath中包含了my.test中所有的类, 但如果未在运行中生成过任何my.test中的类的实例, 则system classloader中的packages列表中将不会出现my.test包 ...
      

  7.   

    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
      

  8.   

    我验证正确
    MyClass is loaded!package my.test
      

  9.   

    Windows 2000 Professional + JBuilder 4.0(J2SE 1.3.0 with Hotspot Client VM) ...
      

  10.   

    我知道了.你用的是jdk1.3
    我用的是jdk1.2
    我有什么办法可以在1.2下做出同样的效果吗?
      

  11.   

    奇怪,我的也不行,我的是122,VAJ带的……
      

  12.   

    在VAJ下不行(122的JDK),用130的JDK就OK了……看来是JDK的问题……
      

  13.   

    正在试 ... 不过那个确实在jdk 1.2.2下不行, 呵呵 ... 因为1.3的ClassLoader较1.2不同,  手头没1.2的源代码, 得花些时间 :~(
      

  14.   

    http://developer.java.sun.com/developer/bugParade/bugs/4256589.html
      

  15.   

    作为了解, 还可以去看看:
    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
      

  16.   

    我去4256589看了,
    感觉1.2下也不应返回为null呀
    而只是get一些信息时为nullBTW:
    请教老兄从何处获得的bug号.
      

  17.   

    faint ... sun的站点上有bug database, search一下不就 ...
    那上面sun的两个文章你看过了吗?
      

  18.   

    thank you!
    1.2下试的有结果吗?
      

  19.   

    狂分特,这java烂成这样,还跨个p平台啊