NOTICE: This version of the NSF Unidata web site (archive.unidata.ucar.edu) is no longer being updated.
Current content can be found at unidata.ucar.edu.

To learn about what's going on, see About the Archive Site.

[netcdf-java] java.lang.NullPointerException at ucar.nc2.NetcdfFileWriter.write(NetcdfFileWriter.java:939)

Dear All,

I would like to write a netCDF4 file in Java based on 
https://www.unidata.ucar.edu/software/thredds/current/netcdf-java/tutorial/NetcdfWriting.html.
 I have a lot of variables and I would like to select just some and write only 
them to netcdf file. I tried to solve this by the the following way:

public class JavaDB {

    public static Variable time;
    public static Variable cloud_1st;
    public static Variable cloud_2nd;
    public static Variable cloud_3th;
    public static Variable cloud_4th;
    public static Variable cloud_5th;
    public static Variable Layer_1st;
    public static Variable Layer_2nd;
    public static Variable Layer_3th;
    public static Variable Layer_4th;
    public static Variable Layer_5th;
    public static Variable CBN;

public static void getDataNC(String location, ArrayList<Integer> Values) throws 
Exception{



        String version = System.getProperty("java.version");
         NetcdfFileWriter ncfile = 
NetcdfFileWriter.createNew(NetcdfFileWriter.Version.netcdf4, location, null);
        // add dimensions

        Dimension heightDim = ncfile.addDimension(null,"height",1539);
        Dimension timeDim = ncfile.addUnlimitedDimension("time");

        //define variables
        for(int k=0; k<Values.size(); k++){

            switch(Values.get(k)){


                case 1:  Variable time = ncfile.addVariable(null, "time", 
DataType.DOUBLE,"time");
                         time.addAttribute( new Attribute("units", "days since 
1970-01-01"));
                         break;
                case 2: Variable cloud_1st = 
ncfile.addVariable(null,"cloud_1st", DataType.INT,"time");
                        cloud_1st.addAttribute( new Attribute("long_name", 
"cloud amount in 1st layer1"));
                        cloud_1st.addAttribute( new Attribute("units", "octa"));
                        cloud_1st.addAttribute(new 
Attribute("_FillValue",-9999));
                        cloud_1st.addAttribute(new Attribute("Vertical 
Visibility",9));
                        cloud_1st.addAttribute(new Attribute("No enough 
data",99));
                        break;
                case 3: Variable cloud_2nd = 
ncfile.addVariable(null,"cloud_2nd", DataType.INT,"time");
                        cloud_2nd.addAttribute( new Attribute("long_name", 
"cloud amount in 2nd layer"));
                        cloud_2nd.addAttribute( new Attribute("units", "octa"));
                        cloud_2nd.addAttribute(new 
Attribute("_FillValue",-9999));
                        cloud_2nd.addAttribute(new Attribute("Vertical 
Visibility",9));
                        cloud_2nd.addAttribute(new Attribute("No enough 
data",99));
                        break;
                case 4: Variable cloud_3th = 
ncfile.addVariable(null,"cloud_3th", DataType.INT,"time");
                        cloud_3th.addAttribute( new Attribute("long_name", 
"cloud amount in 3th layer"));
                        cloud_3th.addAttribute( new Attribute("units", "octa"));
                        cloud_3th.addAttribute(new 
Attribute("_FillValue",-9999));
                        cloud_3th.addAttribute(new Attribute("Vertical 
Visibility",9));
                        cloud_3th.addAttribute(new Attribute("No enough 
data",99));
                        break;
                case 5: Variable cloud_4th = ncfile.addVariable(null, 
"cloud_4th", DataType.INT, "time");
                        cloud_4th.addAttribute( new Attribute("long_name", 
"cloud amount in 4th layer"));
                        cloud_4th.addAttribute( new Attribute("units", "octa"));
                        cloud_4th.addAttribute(new 
Attribute("_FillValue",-9999));
                        cloud_4th.addAttribute(new Attribute("Vertical 
Visibility", 9));
                        cloud_4th.addAttribute(new Attribute("No enough 
data",99));
                        break;
                case 6: Variable cloud_5th = ncfile.addVariable(null, 
"cloud_5th", DataType.INT, "time");
                        cloud_5th.addAttribute( new Attribute("long_name", 
"cloud amount in 5th layer"));
                        cloud_5th.addAttribute( new Attribute("units", "octa"));
                        cloud_5th.addAttribute(new 
Attribute("_FillValue",-9999));
                        cloud_5th.addAttribute(new Attribute("Vertical 
Visibility",9));
                        cloud_5th.addAttribute(new Attribute("no enough 
data",99));
                        break;
                case 7: Variable Layer_1st = 
ncfile.addVariable(null,"Layer_1st",DataType.INT,"time");
                        Layer_1st.addAttribute(new Attribute("long_name", "1st 
cloud layer height"));
                        Layer_1st.addAttribute(new Attribute("units","meter"));
                        Layer_1st.addAttribute(new 
Attribute("_FillValue",-9999));
                        break;
                case 8: Variable Layer_2nd = 
ncfile.addVariable(null,"Layer_2nd",DataType.INT,"time");
                        Layer_2nd.addAttribute(new Attribute("long_name", "2nd 
cloud layer height"));
                        Layer_2nd.addAttribute(new Attribute("units","meter"));
                        Layer_2nd.addAttribute(new 
Attribute("_FillValue",-9999));
                        break;
                case 9: Variable Layer_3th = 
ncfile.addVariable(null,"Layer_3th",DataType.INT,"time");
                        Layer_3th.addAttribute(new Attribute("long_name", "3th 
cloud layer height"));
                        Layer_3th.addAttribute(new Attribute("units","meter"));
                        Layer_3th.addAttribute(new 
Attribute("_FillValue",-9999));
                        break;
                case 10:    Variable Layer_4th = 
ncfile.addVariable(null,"Layer_4th",DataType.INT,"time");
                            Layer_4th.addAttribute(new Attribute("long_name", 
"4th cloud layer height"));
                            Layer_4th.addAttribute(new 
Attribute("units","meter"));
                            Layer_4th.addAttribute(new 
Attribute("_FillValue",-9999));
                            break;
                case 11:    Variable Layer_5th = 
ncfile.addVariable(null,"Layer_5th",DataType.INT,"time");
                            Layer_5th.addAttribute(new Attribute("long_name", 
"5th cloud layer height"));
                            Layer_5th.addAttribute(new 
Attribute("units","meter"));
                            Layer_5th.addAttribute(new 
Attribute("_FillValue",-9999));
                            break;

                case 12:    Variable CBN = 
ncfile.addVariable(null,"CBN",DataType.INT,"time");
                            CBN.addAttribute(new Attribute("long_name","cloud 
base number"));
                            CBN.addAttribute(new Attribute("units", "number"));
                            CBN.addAttribute(new Attribute("no significant 
backscatter",0));
                            CBN.addAttribute(new Attribute("obscuration but no 
cloud",4));
                            CBN.addAttribute(new Attribute("transparent 
obscuration",5));
                            CBN.addAttribute(new Attribute("_FillValue",-9));
                            break;
                }
}

ncfile.create();


        try{


            ArrayDouble.D1 timeData = new ArrayDouble.D1(countLinesResult);
            ArrayInt.D1 cloudL1Data = new ArrayInt.D1(countLinesResult);
            Index ima = cloudL1Data.getIndex();
            ArrayInt.D1 cloudL2Data = new ArrayInt.D1(countLinesResult);
            ArrayInt.D1 cloudL3Data = new ArrayInt.D1(countLinesResult);
            ArrayInt.D1 cloudL4Data = new ArrayInt.D1(countLinesResult);
            ArrayInt.D1 cloudL5Data = new ArrayInt.D1(countLinesResult);
            ArrayInt.D1 cLayer1Data = new ArrayInt.D1(countLinesResult);
            ArrayInt.D1 cLayer2Data = new ArrayInt.D1(countLinesResult);
            ArrayInt.D1 cLayer3Data = new ArrayInt.D1(countLinesResult);
            ArrayInt.D1 cLayer4Data = new ArrayInt.D1(countLinesResult);
            ArrayInt.D1 cLayer5Data = new ArrayInt.D1(countLinesResult);
            ArrayInt.D1 CBNData = new ArrayInt.D1(countLinesResult);


  for (int timeIdx = 0; timeIdx < countLinesResult;timeIdx++){
                    for(int k=0; k<Values.size(); k++){
                        //  System.out.println(Values.get(k));
                                if(Values.get(k)==1){
                                timeData.setDouble(timeIdx,tdate.get(timeIdx));}
                                if(Values.get(k)==2){
                                cloudL1Data.setInt(ima.set(timeIdx), 
cloud_layer_1st.get(timeIdx));}
                                if(Values.get(k)==3){
                                cloudL2Data.setInt(ima.set(timeIdx), 
cloud_layer_2nd.get(timeIdx));}
                                if(Values.get(k)==4){
                                cloudL3Data.setInt(ima.set(timeIdx), 
cloud_layer_3th.get(timeIdx));}
                                if(Values.get(k)==5){
                                cloudL4Data.setInt(ima.set(timeIdx), 
cloud_layer_4th.get(timeIdx));}
                                if(Values.get(k)==6){
                                cloudL5Data.setInt(ima.set(timeIdx), 
cloud_layer_5th.get(timeIdx));}
                                if(Values.get(k)==7){
                                cLayer1Data.setInt(ima.set(timeIdx), 
LayerC_1st.get(timeIdx));}
                                if(Values.get(k)==8){
                                cLayer2Data.setInt(ima.set(timeIdx), 
LayerC_2nd.get(timeIdx));}
                                if(Values.get(k)==9){
                                cLayer3Data.setInt(ima.set(timeIdx), 
LayerC_3th.get(timeIdx));}
                                if(Values.get(k)==10){
                                cLayer4Data.setInt(ima.set(timeIdx), 
LayerC_4th.get(timeIdx));}
                                if(Values.get(k)==11){
                                cLayer5Data.setInt(ima.set(timeIdx), 
LayerC_5th.get(timeIdx));}
                                if(Values.get(k)==12){
                                
CBNData.setInt(ima.set(timeIdx),nbcb.get(timeIdx));}
}
}

// write the data into netCDF file
            for(int k=0; k<Values.size(); k++){
                if(Values.get(k)==1){
                ncfile.write(time, timeData);}
                if(Values.get(k)==2){
                ncfile.write(cloud_1st, cloudL1Data);}
                if(Values.get(k)==3){
                ncfile.write(cloud_2nd, cloudL2Data);}
                if(Values.get(k)==4){
                ncfile.write(cloud_3th, cloudL3Data);}
                if(Values.get(k)==5){
                ncfile.write(cloud_4th, cloudL4Data);}
                if(Values.get(k)==6){
                ncfile.write(cloud_5th, cloudL5Data);}
                if(Values.get(k)==7){
                ncfile.write(Layer_1st, cLayer1Data);}
                if(Values.get(k)==8){
                ncfile.write(Layer_2nd, cLayer2Data);}
                if(Values.get(k)==9){
                ncfile.write(Layer_3th, cLayer3Data);}
                if(Values.get(k)==10){
                ncfile.write(Layer_4th, cLayer4Data);}
                if(Values.get(k)==11){
                ncfile.write(Layer_5th, cLayer5Data);}
                if(Values.get(k)==12){
                ncfile.write(CBN,CBNData);}
}

}catch(Exception e){
            e.printStackTrace();}

    finally{
            try{

                ncfile.close();

            }catch(IOException ex){
                ex.printStackTrace();

            }

        }

But after I run the code I get java.lang.NullPointerException at 
ucar.nc2.NetcdfFileWriter.write(NetcdfFileWriter.java:939). I tried to solve it 
with define global variables size e.g public static Variable time = new 
Variable(); but it is not possible. Could you please informe me how I should 
fix this issue?

Thank you for your help in adavnce!
Best regards,
Beata


  • 2018 messages navigation, sorted by:
    1. Thread
    2. Subject
    3. Author
    4. Date
    5. ↑ Table Of Contents
  • Search the netcdf-java archives: