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

Dear Anotonio,
Thank you very much for your help! It works. To be honest, I had not seen your 
answer in StuckOverflow before I sent the question to netcdf-java.
Have a nice day,
Beáta

From: Antonio S. Cofiño [mailto:cofinoa@xxxxxxxxx]
Sent: Friday, June 22, 2018 11:57 AM
To: netcdf-java@xxxxxxxxxxxxxxxx
Cc: Beáta Szabó-Takács <szabo.b@xxxxxxxxxxxxx>
Subject: Re: [netcdf-java] java.lang.NullPointerException at 
ucar.nc2.NetcdfFileWriter.write(NetcdfFileWriter.java:939)


Dear Beáta,

I have answered to you at StackOverflow:

You are declaring your variables twice, once as static:

  public static Variable time;

and other in the local scope of your switch:

  Variable time = ncfile.addVariable(...);

and therefore you are "losing" the initialized Object in the local scope.

Replace the local declaration by just the assigning the initialized Object to 
the static variable declaration:

  time = ncfile.addVariable(...);

Regards

Antonio S. Cofiño

P.S.:

I have already answered to your question at StackOverflow:

https://stackoverflow.com/questions/50964120/how-can-i-initialize-the-netcdf-varables-as-global-variables-to-avoid-java-lang

On 22/06/18 08:43, Beáta Szabó-Takács wrote:
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






_______________________________________________

NOTE: All exchanges posted to Unidata maintained email lists are

recorded in the Unidata inquiry tracking system and made publicly

available through the web.  Users who post to any of the lists we

maintain are reminded to remove any personal information that they

do not want to be made public.





netcdf-java mailing list

netcdf-java@xxxxxxxxxxxxxxxx<mailto:netcdf-java@xxxxxxxxxxxxxxxx>

For list information or to unsubscribe, visit: 
http://www.unidata.ucar.edu/mailing_lists/

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