首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java.lang.NoClassDefFoundError:无法初始化类javax.media.jai.JAI

java.lang.NoClassDefFoundError:无法初始化类javax.media.jai.JAI
EN

Stack Overflow用户
提问于 2016-07-29 05:34:20
回答 3查看 5.3K关注 0票数 10

最近,我用GeoTools启动了我的第一个程序,在这个程序中,我还使用了Jai-JavaAdvancedImaging1_1_2_01和JDK 1_7。在添加GeoTiff Jars之前运行得很好。我发现了下面的错误

线程"main“中的异常:无法在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)初始化类javax.media.jai.JAI

“守则”如下

代码语言:javascript
复制
 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罐

其他罐子

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

编辑:

我的jai在没有GeoTools集成的情况下工作,但是当我添加gt-geotiff-14.4.jar时,它尝试在JDK1.7中添加与jai-core.jar冲突的JAI-core-1.1.3.jar。因此,我删除了JAI-core-1.1.3.jar和相关的jars,但是它仍然给了我同样的错误。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-08-03 09:31:09

最后,当我删除Geotiff jai-core-1.1.3.jarjai-codec-1.1.3.jarjai-imageio-1.1.jar文件并为jai的gt-实用程序类文件添加新类时,它终于起了作用。我只是从github复制并添加到我的project.gt-utility的src是一个丢失的。罐子也是相互冲突的。

票数 4
EN

Stack Overflow用户

发布于 2016-07-29 05:38:47

必须将jai-core.jar添加到类路径中。

票数 2
EN

Stack Overflow用户

发布于 2016-07-29 08:40:05

请跟随GeoTools设置指令,上面写着JAI:

是一个图像处理库,允许您形成操作链,以类似于函数式编程的方式处理光栅。 参考文献: http://java.net/projects/jai-core下载此版本的JAI 1.1.3在编写本文时,Oracle正在迁移Java项目--尝试如下: 3/ 3/INSTALL.html通过单击平台的链接为您的JDK下载JAI: 示例:jai-1_1_3-lib-windows-i 586-jdk.exe 使用单击安装程序将JAI安装到JDK中。 点击平台的链接下载JRE的JAI: 示例:jai-1_1_3-lib-windows-i 586-jre.exe 使用单击安装程序将JAI安装到JRE中。 (如果您正在使用linux,您当然需要选择适当的下载)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38651163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档