< prev index next >
src/java.desktop/windows/native/libawt/windows/awt_TrayIcon.cpp
Print this page
@@ -999,29 +999,25 @@
HBITMAP hMask = ::CreateBitmap(nW, nH, 1, 1, (BYTE *)andMaskPtr);
// ::GdiFlush();
delete[] andMaskPtr;
- jint *intRasterDataPtr = NULL;
+ /* Copy the raster data because GDI may fail on some Java heap
+ * allocated memory.
+ */
+ length = env->GetArrayLength(intRasterData);
+ jint *intRasterDataPtr = new jint[length];
HBITMAP hColor = NULL;
try {
- intRasterDataPtr = (jint *)env->GetPrimitiveArrayCritical(intRasterData, 0);
- if (intRasterDataPtr == NULL) {
- ::DeleteObject(hMask);
- return;
- }
+ env->GetIntArrayRegion(intRasterData, 0, length, intRasterDataPtr);
hColor = AwtTrayIcon::CreateBMP(NULL, (int *)intRasterDataPtr, nSS, nW, nH);
} catch (...) {
- if (intRasterDataPtr != NULL) {
- env->ReleasePrimitiveArrayCritical(intRasterData, intRasterDataPtr, 0);
- }
+ delete[] intRasterDataPtr;
::DeleteObject(hMask);
throw;
}
-
- env->ReleasePrimitiveArrayCritical(intRasterData, intRasterDataPtr, 0);
- intRasterDataPtr = NULL;
+ delete[] intRasterDataPtr;
HICON hIcon = NULL;
if (hMask && hColor) {
ICONINFO icnInfo;
< prev index next >