OSX上的JNI问题

时间:2009-12-09 20:55:35

标签: java macos java-native-interface awt jai

我在使用Java 6(1.6.0_17 JVM:14.3-b01-101)的OSX(10.5.8)上使用AWT类时遇到了问题。 尝试加载java.awt.Dimension代码只是冻结,这发生在Eclipse或命令行中。有没有遇到同样问题的人? JAI在以下代码中使用该类:

public static byte[] resizeAsJPG(byte[] imageContent, double scale, float outputQuality) throws IllegalArgumentException,
  ImageOperationException {
if (scale <= 0) {
  throw new IllegalArgumentException("scale must be a positive number");
}
if (outputQuality <= 0 || outputQuality > 1.0F) {
  throw new IllegalArgumentException("outputQuality must be between 0 and 1");
}
try {
  // Fetch input image to seekable stream
  RenderedOp originalImage = getRenderedOp(imageContent);
  ((OpImage) originalImage.getRendering()).setTileCache(null);

  // Set scale parameters
  ParameterBlock saclingParams = new ParameterBlock();
  saclingParams.addSource(originalImage); // The source image
  saclingParams.add(scale); // The xScale
  saclingParams.add(scale); // The yScale
  saclingParams.add(0.0); // The x translation
  saclingParams.add(0.0); // The y translation

  // RenderingHints renderingHints = new RenderingHints(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
  Map<RenderingHints.Key, Object> renderingHints = new HashMap<RenderingHints.Key, Object>();
  renderingHints.put(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
  renderingHints.put(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY);
  renderingHints.put(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY);
  renderingHints.put(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

  // Scale using sub-sampling average which provides much better quality than bicubic interpolation
  RenderedOp scaledImage = JAI.create("SubsampleAverage", saclingParams, new RenderingHints(renderingHints));

  // Encode scaled image as JPEG
  JPEGEncodeParam encodeParam = new JPEGEncodeParam();
  encodeParam.setQuality(outputQuality);

  // Since we scale height and width (don't take into account the quality)
  int outputSizeEstimate = (int) (imageContent.length * scale * scale);
  ByteArrayOutputStream outputStream = new ByteArrayOutputStream(outputSizeEstimate);
  ImageEncoder encoder = ImageCodec.createImageEncoder("JPEG", outputStream, encodeParam);
  encoder.encode(scaledImage);
  return outputStream.toByteArray();
} catch (Exception e) {
  throw new ImageOperationException(e.getMessage(), e);
}

}

2 个答案:

答案 0 :(得分:1)

您使用的是Eclipse的Cocoa版本吗? (vs Carbon)如果是这样,那可能是原因。请参阅此主题的讨论:Java getDefaultToolKit() hangs Mac OS X 10.5

答案 1 :(得分:0)

您可以尝试从命令行设置“-Djava.awt.headless = true”标志,这样就可以在不必初始化GUI的情况下运行AWT类。