Я выяснил причину своей проблемы.На некоторых компьютерах отсутствует поддержка OffScreenRendering, необходимая для PrintCanvas3D.java.
Поэтому я использовал робот для создания снимка экрана
public BufferedImage canvasCapture(Dimension size, Point locationOnScreen) {
Rectangle bounds = new Rectangle(locationOnScreen.x, locationOnScreen.y, size.width, size.height);
try{
Robot robot = new Robot(this.getGraphicsConfiguration().getDevice());
return robot.createScreenCapture(bounds);
}catch (Exception e){
e.printStackTrace();
return null;
}
}
Последняя сложная задача - определить, когда следует переключиться с правильного метода печати.в метод ScreenCapture (поскольку перехват возбужденного исключения не работает), после некоторого поиска я обнаружил, что queryProperties () может дать мне эту информацию
вот код в моем Frame3D, чтобы выбрать правильный метод
Boolean OffScreenRenderingSupport = (Boolean)getCanvas3D().queryProperties().get("textureLodOffsetAvailable");
if (OffScreenRenderingSupport){
bImage = getOffScreenCanvas3D().doRender(dim.width, dim.height);
}else{
bImage = getOffScreenCanvas3D().canvasCapture(getCanvas3D().getSize(), getCanvas3D().getLocationOnScreen());
}
Если кто-нибудь может найти лучший способ справиться с этим, пожалуйста, дайте мне знать;)