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.
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/
netcdf-java
archives: