jar 파일을 AndroidProjector에서 처리했습니다. 다른 화면 크기를 수용하기 위해 AndroidProjector를 수정하려고하는데 org.eclipse.swt.graphics.ImageData.blit() - ArrayOutOfBoundsException 문제가 발생합니다.ArrayOutOfBoundsException (org.eclipse.swt.graphics.ImageData.blit 포함)
이 프로젝트는 솔루션의 일부로 this file (RawData)도 사용합니다.
내 안드로이드 프로젝터 호 : 여기
private void getFramebufferHeader(SocketChannel paramSocketChannel)
throws IOException
{
ByteBuffer localByteBuffer = ByteBuffer.wrap(new byte[4]);
readAdbChannel(paramSocketChannel, localByteBuffer);
localByteBuffer.rewind();
localByteBuffer.order(ByteOrder.LITTLE_ENDIAN);
int i = localByteBuffer.getInt();
int j = RawImage.getHeaderSize(i);
localByteBuffer = ByteBuffer.wrap(new byte[j * 4]);
readAdbChannel(paramSocketChannel, localByteBuffer);
localByteBuffer.rewind();
localByteBuffer.order(ByteOrder.LITTLE_ENDIAN);
this.mRawImage = new RawImage();
this.mRawImage.readHeader(i, localByteBuffer,percentSize);
}
ArrayOutOfBounds 예외 :
private void updateDeviceImage(Shell paramShell, RawImage paramRawImage)
{
PaletteData localPaletteData = new PaletteData(paramRawImage.getRedMask(), paramRawImage.getGreenMask(), paramRawImage.getBlueMask());
//paramRawImage.getRedMask() = -16777216
//paramRawImage.getRedMask() = 16711680
//paramRawImage.getBlueMask() = 65289
ImageData localImageData = null;
//ArrayOutOfBounds Exception Here////////////////
//paramRawImage.width = 800
//paramRawImage.height = 1280
//paramRawImage.bpp = 32
//
localImageData = new ImageData(paramRawImage.width, paramRawImage.height, paramRawImage.bpp, localPaletteData, 1, paramRawImage.data);
Image localImage = new Image(paramShell.getDisplay(), localImageData);
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/////////////////////////////////////////
this.mImageLabel.setImage(localImage);
this.mImageLabel.pack();
paramShell.pack();
}
내 변성 RAWDATA 메소드 호출 (percentSize 미만 100 초과 할 때 outofbounds 예외가 발생)
public boolean readHeader(int version, ByteBuffer buf, int percentSize) {
this.version = version;
if (version == 16) {
// compatibility mode with original protocol
this.bpp = 16;
// read actual values.
this.size = buf.getInt() * percentSize/100;
this.width = buf.getInt() * percentSize/100;
this.height = buf.getInt() * percentSize/100;
// create default values for the rest. Format is 565
this.red_offset = 11 * percentSize/100;
this.red_length = 5 * percentSize/100;
this.green_offset = 5 * percentSize/100;
this.green_length = 6 * percentSize/100;
this.blue_offset = 0 ;
this.blue_length = 5 * percentSize/100;
this.alpha_offset = 0;
this.alpha_length = 0;
} else if (version == 1) {
this.bpp = buf.getInt();
this.size = buf.getInt() * percentSize/100;
this.width = buf.getInt() * percentSize/100;
this.height = buf.getInt() * percentSize/100;
if (percentSize < 100) {
this.red_offset = 11;
this.red_length = 5;
this.green_offset = 5;
this.green_length = 6;
this.blue_offset = buf.getInt() ;
this.blue_length = 5;
this.alpha_offset = buf.getInt();
this.alpha_length = buf.getInt();
} else {
this.red_offset = buf.getInt() ;
this.red_length = buf.getInt();
this.blue_offset = buf.getInt();
this.blue_length = buf.getInt();
this.green_offset = buf.getInt();
this.green_length = buf.getInt();
this.alpha_offset = buf.getInt();
this.alpha_length = buf.getInt();
}
/*
*/
} else {
// unsupported protocol!
return false;
}
return true;
}
여기 내 예외는 다음과 같습니다.
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 16390
at org.eclipse.swt.graphics.ImageData.blit(Unknown Source)
at org.eclipse.swt.graphics.Image.init(Unknown Source)
at org.eclipse.swt.graphics.Image.init(Unknown Source)
at org.eclipse.swt.graphics.Image.<init>(Unknown Source)
at com.google.android.AndroidProjector.updateDeviceImage(AndroidProjector.java:262)
at com.google.android.AndroidProjector.open(AndroidProjector.java:56)
at com.google.android.AndroidProjector.main(AndroidProjector.java:273)
디버거를 사용하여 실제로'Image' 생성자로 전달되는 인수를 식별하고 여기에 게시 할 수 있습니까? 그렇지 않으면, 다른 사람들이 당신의 프로그램에서 무슨 일이 벌어지고 있는지 말할 방법이 없습니다. –
@DavidWallace - 메서드 호출에 params로 업데이트되었습니다. 모든 도움을 미리 감사드립니다. –
OK,'paramShell.getDisplay()'는 무엇입니까? –