10

I recently started my first program with GeoTools in which i was also using JAI- Java Advanced Imaging 1_1_2_01 with JDK 1_7. It worked fine until I added GeoTiff Jars. I found following error

Exception in thread "main" java.lang.NoClassDefFoundError: Could not initialize class javax.media.jai.JAI at org.geotools.gce.geotiff.GeoTiffReader.read(GeoTiffReader.java:607) at com.rgb.PixelExtractor.extract(PixelExtractor.java:55) at com.rgb.RGBSpliter.main(RGBSpliter.java:136)

The Code is as below

 public void extract(File f, String name, String date) throws Exception {
 ParameterValue<OverviewPolicy> policy = AbstractGridFormat.OVERVIEW_POLICY
        .createValue();
 policy.setValue(OverviewPolicy.IGNORE);

 // this will basically read 4 tiles worth of data at once from the disk...
 ParameterValue<String> gridsize = AbstractGridFormat.SUGGESTED_TILE_SIZE.createValue();
 //gridsize.setValue(512 * 4 + "," + 512);

 // Setting read type: use JAI ImageRead (true) or ImageReaders read methods (false)
 ParameterValue<Boolean> useJaiRead = AbstractGridFormat.USE_JAI_IMAGEREAD.createValue();
 useJaiRead.setValue(true);

 //reader.read(new GeneralParameterValue[] { policy, gridsize, useJaiRead });
 // The line that throws error
 GridCoverage2D image
        = new GeoTiffReader(f).read(new GeneralParameterValue[]{policy, gridsize, useJaiRead});
 Rectangle2D bounds2D = image.getEnvelope2D().getBounds2D();
 bounds2D.getCenterX();
// calculate zoom level for the image
GridGeometry2D geometry = image.getGridGeometry();



BufferedImage img = ImageIO.read(f);
// ColorModel colorModel = img.getColorModel(      
WritableRaster raster = img.getRaster();

int numBands = raster.getNumBands();

int w = img.getWidth();
int h = img.getHeight();
outer:
for (int i = 0; i < w; i++) {//width...

  for (int j = 0; j < h; j++) {

    double[] latlon = geo(geometry, i, j);
    double lat = latlon[0];
    double lon = latlon[1];

    Double s = 0d;

    String originalBands = "";
    for (int k = 0; k < numBands; k++) {
      double d = raster.getSampleDouble(i, j, k);
      originalBands += d + ",";
      s += d;
    }

    originalBands = originalBands.substring(0, originalBands.length() - 1);
    if (s.compareTo(0d) == 0) {
      continue;
    }
    String geoHash = GeohashUtils.encodeLatLon(lat, lon);
    //here do something with the bands, lat, long, geohash, etc....

    }

   }

   }

  private static double[] geo(GridGeometry2D geometry, int x, int y) throws Exception {

  //int zoomlevel = 1;
  Envelope2D pixelEnvelop = geometry.gridToWorld(new GridEnvelope2D(x, y, 1, 1));

  // pixelEnvelop.getCoordinateReferenceSystem().getName().getCodeSpace();
  return new double[]{pixelEnvelop.getCenterY(), pixelEnvelop.getCenterX()};

 }

 }

JDK Jars

JDK images jar

Other Jars

Part1

part2

I also added classpath variable for GeoTools jars

classpath

Edit:

My jai is working without GeoTools Integration, but when I add gt-geotiff-14.4.jar it try to add JAI-core-1.1.3.jar which conflicts with jai-core.jar in my JDK 1.7. So I removed JAI-core-1.1.3.jar and related jars but still it gives me same error.

prem30488
  • 2,828
  • 2
  • 25
  • 57

3 Answers3

4

Finally it worked when I removed Geotiff jai-core-1.1.3.jar,jai-codec-1.1.3.jar and jai-imageio-1.1.jar files and added new class for jai-ext's gt-utility class files. I just copied from github and added to src of my project.gt-utility was the one which was missing. The jars were conflicting too.

prem30488
  • 2,828
  • 2
  • 25
  • 57
2

You have to add the jai-core.jar to your classpath

Jens
  • 67,715
  • 15
  • 98
  • 113
0

Please follow the GeoTools setup instructions which say for the JAI :

Java Advanced Imaging Java Advanced Imaging is an image processing library allowing you to form chains of operations to process rasters in a manner similar to functional programming.

References:

http://java.net/projects/jai-core Download this Version of JAI

Java Advanced Imaging API 1.1.3 At the time of writing Oracle is migrating java projects around - try the following:

http://download.java.net/media/jai/builds/release/1_1_3/ http://download.java.net/media/jai/builds/release/1_1_3/INSTALL.html Download JAI for your JDK by clicking on the link for your platform:

Example: jai-1_1_3-lib-windows-i586-jdk.exe

Use the one click installer to install JAI into your JDK

Download JAI for your JRE by clicking on the link for your platform:

Example: jai-1_1_3-lib-windows-i586-jre.exe

Use the one click installer to install JAI into your JRE

(If you are working on linux you will of course need to choose the appropriate download)

Ian Turton
  • 10,018
  • 1
  • 28
  • 47
  • jai-1_1_2-lib-windows-i586-jre.exe and jai-1_1_2-lib-windows-i586-jdk.exe, I reinstalled and they are correctly appearing in my eclipse as the jars are showing also the error for access restriction also solved, now only this error is coming for initialization of JAI class. – prem30488 Jul 30 '16 at 06:47
  • All the steps are followed from that site, also the full permission is given to whole JDK folder as well as JRE folder still there is error. – prem30488 Jul 30 '16 at 07:26
  • GeoTools 14.x is also for JDK1.7 and jai-1_1_2-lib is also for JDK 1.7. – prem30488 Aug 01 '16 at 09:08