Parth Trivedi Parth Trivedi - 1 year ago 298
Java Question

java.lang.NoClassDefFoundError: Could not initialize class

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
at com.rgb.PixelExtractor.extract(
at com.rgb.RGBSpliter.main(

The Code is as below

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

// 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();

// 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();
// calculate zoom level for the image
GridGeometry2D geometry = image.getGridGeometry();

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

int numBands = raster.getNumBands();

int w = img.getWidth();
int h = img.getHeight();
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) {
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



I also added classpath variable for GeoTools jars



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

Answer Source

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 was the one which was missing.