java.lang.NoClassDefFoundError : Could not initialize class javax. 媒体.jai.JAI

标签 java jai geotools

我最近使用 GeoTools 开始了我的第一个程序,其中我还使用了 JAI-Java Advanced Imaging 1_1_2_01 和 JDK 1_7。 在我添加 GeoTiff Jars 之前一切正常。我发现了以下错误

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)

代码如下

 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 jar

JDK images jar

其他 jar

Part1

part2

我还为 GeoTools jar 添加了类路径变量

classpath

编辑:

我的 jai 在没有 GeoTools Integration 的情况下工作,但是当我添加 gt-geotiff-14.4.jar 时,它会尝试添加 JAI-core-1.1.3.jar与我的 JDK 1.7 中的 jai-core.jar 冲突。所以我删除了 JAI-core-1.1.3.jar 和相关的 jar,但它仍然给我同样的错误。

最佳答案

当我删除 Geotiff jai-core-1.1.3.jarjai-codec-1.1.3.jarjai-imageio 时它终于起作用了-1.1.jar 文件并为 jai-ext 的 gt-utility 添加了新类类文件。我刚刚从 github 复制并添加到我的项目的 src。gt-utility 是缺少的那个。 jar 也很矛盾。

关于java.lang.NoClassDefFoundError : Could not initialize class javax. 媒体.jai.JAI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38651163/

相关文章:

java - 如何实现jpeg无损?

java - 在 Eclipse 中导入 JAI 的问题

java - 是否可以使用 geotools 读取 shapefile 而无需指定文件的 url?

java - 使用 RestTemplate 解析本地 JSON 文件

java - Spring 内部事务中的 UnexpectedRollBackException

java - 如何在 Jetty 用户表中添加和使用附加字段?

java - 如何从 Spinner 获取客户 ID

java - 在 OSGi 中运行 JAI

performance - 索引和性能

java - map Pane 地理工具