源代码:
public class MedicareApplication {  static private MedicareApplication mApp;
  //我加的变量
  PasswordDialog passwordDialog;
  String hostname;
  String databasename;
  String username;
  String password;  //连接池
  private static medicareApplet md;
  Database medicareDatabase = new Database();
  QueryDataSet baseselecttable = new QueryDataSet();
  QueryDataSet commoninfotable = new QueryDataSet();
  QueryDataSet diseaseinfo = new QueryDataSet();
  QueryDataSet hosipitalizeinfo = new QueryDataSet();
  QueryDataSet medicaliteminfo = new QueryDataSet();
  QueryDataSet medicineinfo = new QueryDataSet();
  QueryDataSet personalaccount = new QueryDataSet();
  QueryDataSet personalinfo = new QueryDataSet();
  QueryDataSet unitinfo = new QueryDataSet();
  QueryDataSet policyparameter = new QueryDataSet();  SysManageFrame sysManageFrame1;
  //MedicareDataModule medicareDataModule1;  //Static Function
  static synchronized public MedicareApplication getInstance() {
    if (mApp == null) {
      mApp = new MedicareApplication();
    }
    return mApp;  }  //Construct the applet
  private MedicareApplication() {
    medicareDatabase.setConnection(new com.borland.dx.sql.dataset.ConnectionDescriptor("jdbc:oracle:thin:@airlulu:1521:OEMREP", "airlulu", "air9413", false, "oracle.jdbc.driver.OracleDriver"));
    //medicareDatabase.setConnection(new com.borland.dx.sql.dataset.ConnectionDescriptor("jdbc:oracle:thin:@"+hostname+":1521:"+databasename, username, password, false, "oracle.jdbc.driver.OracleDriver"));    policyparameter.setQuery(new com.borland.dx.sql.dataset.QueryDescriptor(medicareDatabase, "SELECT POLICYPARAMETER.PKEY,POLICYPARAMETER.MODIFYDATE,POLICYPARAMETER.MODIFYPERSON,POLICYPARAMETER.B" +
      "ASICPARAMETER,POLICYPARAMETER.SPECIALITENPAYSTANDARD,POLICYPARAMETER.HOSPITALIZATOINPAYSTANDARD,POLIC" +
      "YPARAMETER.GREATILLESSPAYSTANDARD,POLICYPARAMETER.PARTPAYITEMSTANDARD,POLICYPARAMETER.REMEDYMANAGEMEN" +
      "TSTANDARD FROM AIRLULU.POLICYPARAMETER", null, true, Load.ALL));
    unitinfo.setQuery(new com.borland.dx.sql.dataset.QueryDescriptor(medicareDatabase, "SELECT UNITINFO.UNITCODE,UNITINFO.AREA,UNITINFO.UNITTYPE,UNITINFO.POSSESSIONMODE,UNITINFO.JOINDATE,UN" +
      "ITINFO.FULLNAME,UNITINFO.ADDRESS,UNITINFO.MAJOTDEPT,UNITINFO.SUMSALARYYEAR,UNITINFO.MEDICAREPRINCIPAL" +
      ",UNITINFO.MEDICAREHANDLER,UNITINFO.BANK,UNITINFO.BANKACCOUNT,UNITINFO.UNITDELEGATE,UNITINFO.DELEGATEP" +
      "OSITION,UNITINFO.MENO,UNITINFO.APPOINTHOSPITALLIST,UNITINFO.OTHERASSURANCELIST " +
      "FROM AIRLULU.UNITINFO", null, true, Load.ALL));
    personalinfo.setQuery(new com.borland.dx.sql.dataset.QueryDescriptor(medicareDatabase, "SELECT PERSONALINFO.PERSONCODE,PERSONALINFO.IDCARD,PERSONALINFO.SEX,PERSONALINFO.BIRTHDAY,PERSONALINF" +
      "O.ASSURANCEID,PERSONALINFO.AREA,PERSONALINFO.JOINDATE,PERSONALINFO.ADDRESS,PERSONALINFO.POSTALCODE,PE" +
      "RSONALINFO.TELEPHONE,PERSONALINFO.PERSONTYPE,PERSONALINFO.FOLK,PERSONALINFO.LASTYEARSUNSALARY,PERSONA" +
      "LINFO.OCCUPATION,PERSONALINFO.\"POSITION\",PERSONALINFO.POST,PERSONALINFO.WORKTYPE,PERSONALINFO.ISSPECI" +
      "ALTYPE,PERSONALINFO.SPECIALTYPE,PERSONALINFO.UNITCODE,PERSONALINFO.UNITNAME,PERSONALINFO.WORKDATE,PER" +
      "SONALINFO.ISOUTOFTOWN,PERSONALINFO.OUTOFTOWNCITY,PERSONALINFO.PORTRAIT,PERSONALINFO.RELATIONS,PERSONA" +
      "LINFO.APPOINTHOSPITALLIST,PERSONALINFO.OTHERASSURANCELIST FROM AIRLULU.PERSONALINFO", null, true, Load.ALL));
    personalaccount.setQuery(new com.borland.dx.sql.dataset.QueryDescriptor(medicareDatabase, "SELECT PERSONALACCOUNT.ASSURANCEID,PERSONALACCOUNT.PERSONCODE,PERSONALACCOUNT.BALANCE,PERSONALACCOUNT" +
      ".FREEZE FROM AIRLULU.PERSONALACCOUNT", null, true, Load.ALL));
    medicineinfo.setQuery(new com.borland.dx.sql.dataset.QueryDescriptor(medicareDatabase, "SELECT MEDICINEINFO.MEDICODE,MEDICINEINFO.MEDINAME,MEDICINEINFO.CREATEDATE,MEDICINEINFO.SPECS,MEDICIN" +
      "EINFO.UNITAGE,MEDICINEINFO.UNITPRICE,MEDICINEINFO.INPUTCODE,MEDICINEINFO.PRODUCINGAREA,MEDICINEINFO.M" +
      "EDITYPE,MEDICINEINFO.PAYLEVEL,MEDICINEINFO.ISSPECIALTY,MEDICINEINFO.ISPARTPAYITEM,MEDICINEINFO.PARTPA" +
      "YTYPE,MEDICINEINFO.ISMEDICARETYPE FROM AIRLULU.MEDICINEINFO", null, true, Load.ALL));
    medicaliteminfo.setQuery(new com.borland.dx.sql.dataset.QueryDescriptor(medicareDatabase, "SELECT MEDICALITEMINFO.ITEMCODE,MEDICALITEMINFO.ITEMNAME,MEDICALITEMINFO.ITEMTYPE,MEDICALITEMINFO.ISS" +
      "PECIALTY,MEDICALITEMINFO.ISMEDICARETYPE FROM AIRLULU.MEDICALITEMINFO", null, true, Load.ALL));
    hosipitalizeinfo.setQuery(new com.borland.dx.sql.dataset.QueryDescriptor(medicareDatabase, "SELECT HOSIPITALIZEINFO.PERSONCODE,HOSIPITALIZEINFO.HOSPITALIZEID,HOSIPITALIZEINFO.ASSURANCEID,HOSIPI" +
      "TALIZEINFO.HOSPITALIZEDATE,HOSIPITALIZEINFO.INFO,HOSIPITALIZEINFO.MONEYUSED " +
      "FROM AIRLULU.HOSIPITALIZEINFO", null, true, Load.ALL));
    diseaseinfo.setQuery(new com.borland.dx.sql.dataset.QueryDescriptor(medicareDatabase, "SELECT DISEASEINFO.DISEASECODE,DISEASEINFO.DISEASENAME,DISEASEINFO.CREATEDATE,DISEASEINFO.INPUTCODE,D" +
      "ISEASEINFO.ISSPECIALTY,DISEASEINFO.ISMEDICARETYPE FROM AIRLULU.DISEASEINFO", null, true, Load.ALL));
    commoninfotable.setQuery(new com.borland.dx.sql.dataset.QueryDescriptor(medicareDatabase, "SELECT COMMONINFOTABLE.INFOTYPE,COMMONINFOTABLE.ITEMCONTENT FROM " +
      "AIRLULU.COMMONINFOTABLE", null, true, Load.ALL));
    baseselecttable.setQuery(new com.borland.dx.sql.dataset.QueryDescriptor(medicareDatabase, "SELECT BASESELECTTABLE.BASEDESCRIBE,BASESELECTTABLE.BASENUMBER FROM " +
      "AIRLULU.BASESELECTTABLE", null, true, Load.ALL));
    //输入用户名和密码,传到变量username和password
    passwordDialog=new PasswordDialog();
    passwordDialog.setLocation(100,100);
    passwordDialog.show();
    hostname=passwordDialog.hostname.getText();
    databasename=passwordDialog.databasename.getText();
    username=passwordDialog.username.getText();
    password=new String(passwordDialog.password.getPassword());
    passwordDialog.dispose();
    //ConnectionDescriptor cd=new ConnectionDescriptor("jdbc:oracle:thin:@"+hostname+":1521:"+databasename,username,password, false, "oracle.jdbc.driver.OracleDriver");
    sysManageFrame1 = new SysManageFrame();
    sysManageFrame1.show();  }  //获得连接池内容的方法
  public Database getMedicareDatabase() {
    return medicareDatabase;
  }
  public QueryDataSet getBaseselecttable() {
    return baseselecttable;
  }
  public QueryDataSet getCommoninfotable() {
    return commoninfotable;
  }
  public QueryDataSet getDiseaseinfo() {
    return diseaseinfo;
  }
  public QueryDataSet getHosipitalizeinfo() {
    return hosipitalizeinfo;
  }
  public QueryDataSet getMedicaliteminfo() {
    return medicaliteminfo;
  }
  public QueryDataSet getMedicineinfo() {
    return medicineinfo;
  }
  public QueryDataSet getPersonalaccount() {
    return personalaccount;
  }
  public QueryDataSet getPersonalinfo() {
    return personalinfo;
  }
  public QueryDataSet getUnitinfo() {
    return unitinfo;
  }
  public QueryDataSet getPolicyparameter() {
    return policyparameter;
  }
  //Get Applet information
  public String getClassInfo() {
    return "Class Information";
  }
  //Get parameter info
  public String[][] getParameterInfo() {
    return null;
  }
}之后在主程序中写了MedicareApplication.getInstance();然后:
public class Sm_DiseaseInfoPanel extends JPanel {
  Database database1 = MedicareApplication.getInstance().getMedicareDatabase();
  
  QueryDataSet queryDataSet1 =  MedicareApplication.getInstance().getDiseaseinfo();
  }

解决方案 »

  1.   

    先把你的程序简化点.一步一步试.
    我试了一下,是可以的.
    public class MedicareApplication {  static private MedicareApplication mApp;  static synchronized public MedicareApplication getInstance() {
        if (mApp == null) {
          mApp = new MedicareApplication();
        }
        return mApp;
      }
    }
    public class Test {    public Test() {
        }    public void test1() {
            MedicareApplication ma = MedicareApplication.getInstance();
            System.out.println(ma);
        }    public void test2() {
            MedicareApplication ma = MedicareApplication.getInstance();
            System.out.println(ma);
        }    public static void main(String[] args) {
            Test t = new Test();
            t.test1();
            t.test2();
            //是同一个对象的地址
        }}
      

  2.   

    先把你的程序简化点.一步一步试.
    我试了一下,是可以的.
    public class MedicareApplication {  static private MedicareApplication mApp;  static synchronized public MedicareApplication getInstance() {
        if (mApp == null) {
          mApp = new MedicareApplication();
        }
        return mApp;
      }
    }
    public class Test {    public Test() {
        }    public void test1() {
            MedicareApplication ma = MedicareApplication.getInstance();
            System.out.println(ma);
        }    public void test2() {
            MedicareApplication ma = MedicareApplication.getInstance();
            System.out.println(ma);
        }    public static void main(String[] args) {
            Test t = new Test();
            t.test1();
            t.test2();
            //是同一个对象的地址
        }}
      

  3.   

    知道怎么回事了!!
      类2是在类1的初始化中实例化的,这时类1还没有生成实例,所以类2会取得NULL,谢谢!!!