I recently started my first program with GeoTools, in which I also used JAI-Java Advanced Imaging 1_1_2_01 with JDK 1_7. It worked fine until I added GeoTiff Jars . I found the following error
Exception in thread "main" java.lang.NoClassDefFoundError: Failed to initialize javax.media.jai.JAI class on org.geotools.gce.geotiff.GeoTiffReader.read (GeoTiffReader.java:607) at com.rgb.PixelExtractor.ext (PixelExtractor.java:55) at com.rgb.RGBSpliter.main (RGBSpliter.java:136)
Code 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

Other banks


I also added a classpath variable for GeoTools cans

Edit:
My jai works without GeoTools integration, but when I add gt-geotiff-14.4.jar , it tries to add JAI-core-1.1.3.jar , which conflicts with jai-core.jar in my JDK 1.7. So I uninstalled JAI-core-1.1.3.jar and its associated banks, but still it gives me the same error.