Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
4bc3c7f5
D
dragonwell8_jdk
项目概览
openanolis
/
dragonwell8_jdk
通知
3
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dragonwell8_jdk
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
4bc3c7f5
编写于
4月 07, 2014
作者:
P
prr
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
8035569: [parfait] JNI expection pending in jdk/src/windows/native/sun/windows/WPrinterJob.cpp
Reviewed-by: serb, jgodinez
上级
e43ae97d
变更
2
显示空白变更内容
内联
并排
Showing
2 changed file
with
261 addition
and
186 deletion
+261
-186
src/windows/native/sun/windows/WPrinterJob.cpp
src/windows/native/sun/windows/WPrinterJob.cpp
+260
-185
src/windows/native/sun/windows/awt_new.cpp
src/windows/native/sun/windows/awt_new.cpp
+1
-1
未找到文件。
src/windows/native/sun/windows/WPrinterJob.cpp
浏览文件 @
4bc3c7f5
...
...
@@ -130,6 +130,9 @@ Java_sun_print_Win32PrintServiceLookup_getAllPrinterNames(JNIEnv *env,
jstring
utf_str
;
jclass
clazz
=
env
->
FindClass
(
"java/lang/String"
);
if
(
clazz
==
NULL
)
{
return
NULL
;
}
jobjectArray
nameArray
;
try
{
...
...
@@ -240,6 +243,9 @@ Java_sun_print_Win32PrintService_getMediaPrintableArea(JNIEnv *env,
LPTSTR
printerName
=
(
LPTSTR
)
JNU_GetStringPlatformChars
(
env
,
printer
,
NULL
);
if
(
printerName
==
NULL
)
{
return
NULL
;
}
jfloatArray
printableArray
=
NULL
;
...
...
@@ -262,7 +268,7 @@ Java_sun_print_Win32PrintService_getMediaPrintableArea(JNIEnv *env,
if
(
pDevMode
!=
NULL
)
{
::
GlobalFree
(
pDevMode
);
}
DeleteDC
(
pdc
);
::
ClosePrinter
(
hPrinter
);
JNU_ReleaseStringPlatformChars
(
env
,
printer
,
printerName
);
return
printableArray
;
...
...
@@ -283,25 +289,21 @@ Java_sun_print_Win32PrintService_getMediaPrintableArea(JNIEnv *env,
int
resy
=
GetDeviceCaps
(
pdc
,
LOGPIXELSY
);
printableArray
=
env
->
NewFloatArray
(
4
);
if
(
printableArray
==
NULL
)
{
throw
std
::
bad_alloc
();
}
jboolean
isCopy
;
jfloat
*
iPrintables
=
env
->
GetFloatArrayElements
(
printableArray
,
&
isCopy
),
*
savePrintables
=
iPrintables
;
if
(
printableArray
!=
NULL
)
{
jfloat
*
iPrintables
=
env
->
GetFloatArrayElements
(
printableArray
,
NULL
);
if
(
iPrintables
!=
NULL
)
{
iPrintables
[
0
]
=
(
float
)
left
/
resx
;
iPrintables
[
1
]
=
(
float
)
top
/
resy
;
iPrintables
[
2
]
=
(
float
)
width
/
resx
;
iPrintables
[
3
]
=
(
float
)
height
/
resy
;
env
->
ReleaseFloatArrayElements
(
printableArray
,
savePrintables
,
0
);
env
->
ReleaseFloatArrayElements
(
printableArray
,
iPrintables
,
0
);
}
}
GlobalFree
(
pDevMode
);
DeleteDC
(
pdc
);
}
DeleteDC
(
pdc
);
JNU_ReleaseStringPlatformChars
(
env
,
printer
,
printerName
);
return
printableArray
;
...
...
@@ -309,52 +311,68 @@ Java_sun_print_Win32PrintService_getMediaPrintableArea(JNIEnv *env,
CATCH_BAD_ALLOC_RET
(
NULL
);
}
JNIEXPORT
jintArray
JNICALL
Java_sun_print_Win32PrintService_getAllMediaIDs
(
JNIEnv
*
env
,
jobject
peer
,
jstring
printer
,
jstring
port
)
jintArray
getIDs
(
JNIEnv
*
env
,
jstring
printer
,
jstring
port
,
int
dm_id
)
{
TRY
;
LPTSTR
printerName
=
(
LPTSTR
)
JNU_GetStringPlatformChars
(
env
,
printer
,
NULL
);
LPTSTR
printerPort
=
(
LPTSTR
)
JNU_GetStringPlatformChars
(
env
,
port
,
NULL
);
jintArray
mediasizeArray
=
NULL
;
if
(
printerName
==
NULL
||
printerPort
==
NULL
)
{
if
(
printerName
!=
NULL
)
{
JNU_ReleaseStringPlatformChars
(
env
,
printer
,
printerName
);
}
if
(
printerPort
!=
NULL
)
{
JNU_ReleaseStringPlatformChars
(
env
,
port
,
printerPort
);
}
return
NULL
;
}
SAVE_CONTROLWORD
int
num
Sizes
=
::
DeviceCapabilities
(
printerName
,
printerPort
,
DC_PAPERS
,
NULL
,
NULL
);
int
num
IDs
=
::
DeviceCapabilities
(
printerName
,
printerPort
,
dm_id
,
NULL
,
NULL
);
RESTORE_CONTROLWORD
if
(
numSizes
>
0
)
{
mediasizeArray
=
env
->
NewIntArray
(
numSizes
);
if
(
mediasizeArray
==
NULL
)
{
throw
std
::
bad_alloc
();
jintArray
idArray
=
NULL
;
if
(
numIDs
>
0
)
{
idArray
=
env
->
NewIntArray
(
numIDs
);
if
(
idArray
!=
NULL
)
{
jint
*
jpcIndices
=
env
->
GetIntArrayElements
(
idArray
,
NULL
);
if
(
jpcIndices
!=
NULL
)
{
jint
*
saveFormats
=
jpcIndices
;
LPTSTR
buf
=
NULL
;
try
{
buf
=
(
LPTSTR
)
new
char
[
numIDs
*
sizeof
(
WORD
)];
}
catch
(
std
::
bad_alloc
&
)
{
buf
=
NULL
;
}
jboolean
isCopy
;
jint
*
jpcIndices
=
env
->
GetIntArrayElements
(
mediasizeArray
,
&
isCopy
),
*
saveFormats
=
jpcIndices
;
LPTSTR
papersBuf
=
(
LPTSTR
)
new
char
[
numSizes
*
sizeof
(
WORD
)];
if
(
buf
!=
NULL
)
{
if
(
::
DeviceCapabilities
(
printerName
,
printerPort
,
DC_PAPERS
,
papersBuf
,
NULL
)
!=
-
1
)
{
dm_id
,
buf
,
NULL
)
!=
-
1
)
{
WORD
*
id
=
(
WORD
*
)
buf
;
for
(
int
i
=
0
;
i
<
numIDs
;
i
++
,
id
++
)
{
jpcIndices
[
i
]
=
*
id
;
}
}
RESTORE_CONTROLWORD
WORD
*
pDmPaperSize
=
(
WORD
*
)
papersB
uf
;
for
(
int
i
=
0
;
i
<
numSizes
;
i
++
,
pDmPaperSize
++
)
{
jpcIndices
[
i
]
=
*
pDmPaperSize
;
delete
[]
b
uf
;
}
env
->
ReleaseIntArrayElements
(
idArray
,
saveFormats
,
0
)
;
}
}
delete
[]
papersBuf
;
env
->
ReleaseIntArrayElements
(
mediasizeArray
,
saveFormats
,
0
);
}
JNU_ReleaseStringPlatformChars
(
env
,
printer
,
printerName
);
JNU_ReleaseStringPlatformChars
(
env
,
port
,
printerPort
);
return
mediasizeArray
;
return
idArray
;
}
CATCH_BAD_ALLOC_RET
(
NULL
);
JNIEXPORT
jintArray
JNICALL
Java_sun_print_Win32PrintService_getAllMediaIDs
(
JNIEnv
*
env
,
jobject
peer
,
jstring
printer
,
jstring
port
)
{
return
getIDs
(
env
,
printer
,
port
,
DC_PAPERS
);
}
...
...
@@ -364,47 +382,7 @@ Java_sun_print_Win32PrintService_getAllMediaTrays(JNIEnv *env,
jstring
printer
,
jstring
port
)
{
TRY
;
LPTSTR
printerName
=
(
LPTSTR
)
JNU_GetStringPlatformChars
(
env
,
printer
,
NULL
);
LPTSTR
printerPort
=
(
LPTSTR
)
JNU_GetStringPlatformChars
(
env
,
port
,
NULL
);
jintArray
mediaTrayArray
=
NULL
;
SAVE_CONTROLWORD
int
nBins
=
::
DeviceCapabilities
(
printerName
,
printerPort
,
DC_BINS
,
NULL
,
NULL
)
;
RESTORE_CONTROLWORD
if
(
nBins
>
0
)
{
mediaTrayArray
=
env
->
NewIntArray
(
nBins
);
if
(
mediaTrayArray
==
NULL
)
{
throw
std
::
bad_alloc
();
}
jboolean
isCopy
;
jint
*
jpcIndices
=
env
->
GetIntArrayElements
(
mediaTrayArray
,
&
isCopy
),
*
saveFormats
=
jpcIndices
;
LPTSTR
buf
=
(
LPTSTR
)
new
char
[
nBins
*
sizeof
(
WORD
)];
if
(
::
DeviceCapabilities
(
printerName
,
printerPort
,
DC_BINS
,
buf
,
NULL
)
!=
-
1
)
{
RESTORE_CONTROLWORD
WORD
*
pBins
=
(
WORD
*
)
buf
;
for
(
int
i
=
0
;
i
<
nBins
;
i
++
)
{
jpcIndices
[
i
]
=
*
(
pBins
+
i
);
}
}
delete
[]
buf
;
env
->
ReleaseIntArrayElements
(
mediaTrayArray
,
saveFormats
,
0
);
}
JNU_ReleaseStringPlatformChars
(
env
,
printer
,
printerName
);
JNU_ReleaseStringPlatformChars
(
env
,
port
,
printerPort
);
return
mediaTrayArray
;
CATCH_BAD_ALLOC_RET
(
NULL
);
return
getIDs
(
env
,
printer
,
port
,
DC_BINS
);
}
...
...
@@ -414,33 +392,42 @@ Java_sun_print_Win32PrintService_getAllMediaSizes(JNIEnv *env,
jstring
printer
,
jstring
port
)
{
TRY
;
LPTSTR
printerName
=
(
LPTSTR
)
JNU_GetStringPlatformChars
(
env
,
printer
,
NULL
);
LPTSTR
printerName
=
(
LPTSTR
)
JNU_GetStringPlatformChars
(
env
,
printer
,
NULL
);
LPTSTR
printerPort
=
(
LPTSTR
)
JNU_GetStringPlatformChars
(
env
,
port
,
NULL
);
jintArray
mediaArray
=
NULL
;
if
(
printerName
==
NULL
||
printerPort
==
NULL
)
{
if
(
printerName
!=
NULL
)
{
JNU_ReleaseStringPlatformChars
(
env
,
printer
,
printerName
);
}
if
(
printerPort
!=
NULL
)
{
JNU_ReleaseStringPlatformChars
(
env
,
port
,
printerPort
);
}
return
NULL
;
}
SAVE_CONTROLWORD
int
nPapers
=
::
DeviceCapabilities
(
printerName
,
printerPort
,
DC_PAPERSIZE
,
NULL
,
NULL
)
;
int
nPapers
=
::
DeviceCapabilities
(
printerName
,
printerPort
,
DC_PAPERSIZE
,
NULL
,
NULL
)
;
RESTORE_CONTROLWORD
jintArray
mediaArray
=
NULL
;
jint
*
saveFormats
=
NULL
;
if
(
nPapers
>
0
)
{
mediaArray
=
env
->
NewIntArray
(
nPapers
*
2
);
if
(
mediaArray
==
NULL
)
{
throw
std
::
bad_alloc
();
if
(
mediaArray
!=
NULL
)
{
jint
*
jpcIndices
=
env
->
GetIntArrayElements
(
mediaArray
,
NULL
);
if
(
jpcIndices
!=
NULL
)
{
saveFormats
=
jpcIndices
;
LPTSTR
buf
=
NULL
;
try
{
buf
=
(
LPTSTR
)
new
char
[
nPapers
*
sizeof
(
POINT
)];
}
catch
(
std
::
bad_alloc
&
)
{
buf
=
NULL
;
}
jboolean
isCopy
;
jint
*
jpcIndices
=
env
->
GetIntArrayElements
(
mediaArray
,
&
isCopy
),
*
saveFormats
=
jpcIndices
;
LPTSTR
buf
=
(
LPTSTR
)
new
char
[
nPapers
*
sizeof
(
POINT
)];
// array of POINTs
if
(
buf
!=
NULL
)
{
if
(
::
DeviceCapabilities
(
printerName
,
printerPort
,
DC_PAPERSIZE
,
buf
,
NULL
)
!=
-
1
)
{
POINT
*
pDim
=
(
POINT
*
)
buf
;
for
(
int
i
=
0
;
i
<
nPapers
;
i
++
)
{
jpcIndices
[
i
*
2
]
=
(
pDim
+
i
)
->
x
;
...
...
@@ -449,65 +436,95 @@ Java_sun_print_Win32PrintService_getAllMediaSizes(JNIEnv *env,
}
RESTORE_CONTROLWORD
delete
[]
buf
;
}
env
->
ReleaseIntArrayElements
(
mediaArray
,
saveFormats
,
0
);
saveFormats
=
NULL
;
}
}
}
JNU_ReleaseStringPlatformChars
(
env
,
printer
,
printerName
);
JNU_ReleaseStringPlatformChars
(
env
,
port
,
printerPort
);
if
(
mediaArray
!=
NULL
&&
saveFormats
!=
NULL
)
{
env
->
ReleaseIntArrayElements
(
mediaArray
,
saveFormats
,
0
);
}
return
mediaArray
;
CATCH_BAD_ALLOC_RET
(
NULL
);
}
jobjectArray
getAllDCNames
(
JNIEnv
*
env
,
jobject
peer
,
jstring
printer
,
jstring
port
,
unsigned
int
dc_id
,
unsigned
int
buf_len
)
{
TRY
;
LPTSTR
printerName
=
(
LPTSTR
)
JNU_GetStringPlatformChars
(
env
,
printer
,
NULL
);
LPTSTR
printerName
=
(
LPTSTR
)
JNU_GetStringPlatformChars
(
env
,
printer
,
NULL
);
LPTSTR
printerPort
=
(
LPTSTR
)
JNU_GetStringPlatformChars
(
env
,
port
,
NULL
);
if
(
printerName
==
NULL
||
printerPort
==
NULL
)
{
if
(
printerName
!=
NULL
)
{
JNU_ReleaseStringPlatformChars
(
env
,
printer
,
printerName
);
}
if
(
printerPort
!=
NULL
)
{
JNU_ReleaseStringPlatformChars
(
env
,
port
,
printerPort
);
}
return
NULL
;
}
jstring
utf_str
;
jclass
cls
=
env
->
FindClass
(
"java/lang/String"
);
jobjectArray
names
=
NULL
;
jobjectArray
names
=
NULL
;
LPTSTR
buf
=
NULL
;
SAVE_CONTROLWORD
int
cReturned
=
::
DeviceCapabilities
(
printerName
,
printerPort
,
dc_id
,
NULL
,
NULL
);
RESTORE_CONTROLWORD
if
(
cReturned
>
0
)
{
if
(
cReturned
<=
0
)
{
JNU_ReleaseStringPlatformChars
(
env
,
printer
,
printerName
);
JNU_ReleaseStringPlatformChars
(
env
,
port
,
printerPort
);
return
NULL
;
}
try
{
buf
=
(
LPTSTR
)
new
char
[
cReturned
*
buf_len
*
sizeof
(
TCHAR
)];
}
catch
(
std
::
bad_alloc
&
)
{
buf
=
NULL
;
}
if
(
buf
==
NULL
)
{
throw
std
::
bad_alloc
();
JNU_ReleaseStringPlatformChars
(
env
,
printer
,
printerName
);
JNU_ReleaseStringPlatformChars
(
env
,
port
,
printerPort
);
JNU_ThrowOutOfMemoryError
(
env
,
"OutOfMemoryError"
);
return
NULL
;
}
cReturned
=
::
DeviceCapabilities
(
printerName
,
printerPort
,
dc_id
,
buf
,
NULL
);
RESTORE_CONTROLWORD
JNU_ReleaseStringPlatformChars
(
env
,
printer
,
printerName
);
JNU_ReleaseStringPlatformChars
(
env
,
port
,
printerPort
);
if
(
cReturned
>
0
)
{
jclass
cls
=
env
->
FindClass
(
"java/lang/String"
);
if
(
cls
!=
NULL
)
{
names
=
env
->
NewObjectArray
(
cReturned
,
cls
,
NULL
);
if
(
names
==
NULL
)
{
throw
std
::
bad_alloc
();
}
if
(
names
==
NULL
||
cls
==
NULL
)
{
delete
buf
;
return
names
;
}
for
(
int
i
=
0
;
i
<
cReturned
;
i
++
)
{
utf_str
=
JNU_NewStringPlatform
(
env
,
buf
+
(
buf_len
*
i
));
if
(
utf_str
==
NULL
)
{
throw
std
::
bad_alloc
();
delete
buf
;
return
names
;
}
env
->
SetObjectArrayElement
(
names
,
i
,
utf_str
);
env
->
DeleteLocalRef
(
utf_str
);
}
}
delete
[]
buf
;
}
return
names
;
CATCH_BAD_ALLOC_RET
(
NULL
);
}
...
...
@@ -540,6 +557,16 @@ Java_sun_print_Win32PrintService_getCopiesSupported(JNIEnv *env,
LPTSTR
printerName
=
(
LPTSTR
)
JNU_GetStringPlatformChars
(
env
,
printer
,
NULL
);
LPTSTR
printerPort
=
(
LPTSTR
)
JNU_GetStringPlatformChars
(
env
,
port
,
NULL
);
if
(
printerName
==
NULL
||
printerPort
==
NULL
)
{
if
(
printerName
!=
NULL
)
{
JNU_ReleaseStringPlatformChars
(
env
,
printer
,
printerName
);
}
if
(
printerPort
!=
NULL
)
{
JNU_ReleaseStringPlatformChars
(
env
,
port
,
printerPort
);
}
return
1
;
}
SAVE_CONTROLWORD
int
numCopies
=
::
DeviceCapabilities
(
printerName
,
printerPort
,
DC_COPIES
,
NULL
,
NULL
);
...
...
@@ -573,32 +600,41 @@ Java_sun_print_Win32PrintService_getAllResolutions(JNIEnv *env,
jstring
printer
,
jstring
port
)
{
TRY
;
LPTSTR
printerName
=
(
LPTSTR
)
JNU_GetStringPlatformChars
(
env
,
printer
,
NULL
);
LPTSTR
printerPort
=
(
LPTSTR
)
JNU_GetStringPlatformChars
(
env
,
port
,
NULL
);
jintArray
resolutionArray
=
NULL
;
if
(
printerName
==
NULL
||
printerPort
==
NULL
)
{
if
(
printerName
!=
NULL
)
{
JNU_ReleaseStringPlatformChars
(
env
,
printer
,
printerName
);
}
if
(
printerPort
!=
NULL
)
{
JNU_ReleaseStringPlatformChars
(
env
,
port
,
printerPort
);
}
return
NULL
;
}
SAVE_CONTROLWORD
int
nResolutions
=
::
DeviceCapabilities
(
printerName
,
printerPort
,
DC_ENUMRESOLUTIONS
,
NULL
,
NULL
);
RESTORE_CONTROLWORD
jintArray
resolutionArray
=
NULL
;
if
(
nResolutions
>
0
)
{
resolutionArray
=
env
->
NewIntArray
(
nResolutions
*
2
);
if
(
resolutionArray
==
NULL
)
{
throw
std
::
bad_alloc
();
if
(
resolutionArray
!=
NULL
)
{
jint
*
jpcIndices
=
env
->
GetIntArrayElements
(
resolutionArray
,
NULL
);
if
(
jpcIndices
!=
NULL
)
{
jint
*
saveFormats
=
jpcIndices
;
LPTSTR
resBuf
=
NULL
;
try
{
resBuf
=
(
LPTSTR
)
new
char
[
nResolutions
*
sizeof
(
LONG
)
*
2
];
}
catch
(
std
::
bad_alloc
&
)
{
resBuf
=
NULL
;
}
jboolean
isCopy
;
jint
*
jpcIndices
=
env
->
GetIntArrayElements
(
resolutionArray
,
&
isCopy
),
*
saveFormats
=
jpcIndices
;
LPTSTR
resBuf
=
(
LPTSTR
)
new
char
[
nResolutions
*
sizeof
(
LONG
)
*
2
];
// pairs of long
if
(
resBuf
!=
NULL
)
{
if
(
::
DeviceCapabilities
(
printerName
,
printerPort
,
DC_ENUMRESOLUTIONS
,
resBuf
,
NULL
)
!=
-
1
)
{
DC_ENUMRESOLUTIONS
,
resBuf
,
NULL
)
!=
-
1
)
{
LONG
*
pResolution
=
(
LONG
*
)
resBuf
;
for
(
int
i
=
0
;
i
<
nResolutions
;
i
++
)
{
jpcIndices
[
i
*
2
]
=
*
pResolution
++
;
...
...
@@ -607,14 +643,15 @@ Java_sun_print_Win32PrintService_getAllResolutions(JNIEnv *env,
}
RESTORE_CONTROLWORD
delete
[]
resBuf
;
}
env
->
ReleaseIntArrayElements
(
resolutionArray
,
saveFormats
,
0
);
}
}
}
JNU_ReleaseStringPlatformChars
(
env
,
printer
,
printerName
);
JNU_ReleaseStringPlatformChars
(
env
,
printer
,
printerPort
);
return
resolutionArray
;
CATCH_BAD_ALLOC_RET
(
NULL
);
}
...
...
@@ -672,6 +709,7 @@ Java_sun_print_Win32PrintService_getPrinterPort(JNIEnv *env,
}
catch
(
std
::
bad_alloc
&
)
{
delete
[]
buffer
;
JNU_ThrowOutOfMemoryError
(
env
,
"OutOfMemoryError"
);
return
NULL
;
}
if
(
printerPort
==
NULL
)
{
...
...
@@ -692,6 +730,17 @@ Java_sun_print_Win32PrintService_getCapabilities(JNIEnv *env,
{
LPTSTR
printerName
=
(
LPTSTR
)
JNU_GetStringPlatformChars
(
env
,
printer
,
NULL
);
LPTSTR
printerPort
=
(
LPTSTR
)
JNU_GetStringPlatformChars
(
env
,
port
,
NULL
);
if
(
printerName
==
NULL
||
printerPort
==
NULL
)
{
if
(
printerName
!=
NULL
)
{
JNU_ReleaseStringPlatformChars
(
env
,
printer
,
printerName
);
}
if
(
printerPort
!=
NULL
)
{
JNU_ReleaseStringPlatformChars
(
env
,
port
,
printerPort
);
}
return
NULL
;
}
// 0x1000 is a flag to indicate that getCapabilities has already been called.
// 0x0001 is a flag for color support and supported is the default.
jint
ret
=
0x1001
;
...
...
@@ -761,28 +810,41 @@ Java_sun_print_Win32PrintService_getDefaultSettings(JNIEnv *env,
HANDLE
hPrinter
;
LPDEVMODE
pDevMode
=
NULL
;
TRY
;
LPTSTR
printerName
=
(
LPTSTR
)
JNU_GetStringPlatformChars
(
env
,
printer
,
NULL
);
LPTSTR
printerPort
=
(
LPTSTR
)
JNU_GetStringPlatformChars
(
env
,
port
,
NULL
);
if
(
printerName
==
NULL
||
printerPort
==
NULL
)
{
if
(
printerName
!=
NULL
)
{
JNU_ReleaseStringPlatformChars
(
env
,
printer
,
printerName
);
}
if
(
printerPort
!=
NULL
)
{
JNU_ReleaseStringPlatformChars
(
env
,
port
,
printerPort
);
}
return
NULL
;
}
jint
*
defIndices
=
NULL
;
jintArray
defaultArray
=
env
->
NewIntArray
(
NDEFAULT
);
if
(
defaultArray
==
NULL
)
{
throw
std
::
bad_alloc
();
if
(
defaultArray
!=
NULL
)
{
defIndices
=
env
->
GetIntArrayElements
(
defaultArray
,
NULL
);
}
if
(
defIndices
==
NULL
)
{
JNU_ReleaseStringPlatformChars
(
env
,
printer
,
printerName
);
JNU_ReleaseStringPlatformChars
(
env
,
port
,
printerPort
);
return
NULL
;
}
jboolean
isCopy
;
jint
*
defIndices
=
env
->
GetIntArrayElements
(
defaultArray
,
&
isCopy
),
*
saveFormats
=
defIndices
;
jint
*
saveFormats
=
defIndices
;
for
(
int
i
=
0
;
i
<
NDEFAULT
;
i
++
)
{
defIndices
[
i
]
=
GETDEFAULT_ERROR
;
for
(
int
i
=
0
;
i
<
NDEFAULT
;
i
++
)
{
defIndices
[
i
]
=
GETDEFAULT_ERROR
;
}
/* Start by opening the printer */
if
(
!::
OpenPrinter
(
printerName
,
&
hPrinter
,
NULL
))
{
env
->
ReleaseIntArrayElements
(
defaultArray
,
saveFormats
,
0
);
JNU_ReleaseStringPlatformChars
(
env
,
printer
,
printerName
);
JNU_ReleaseStringPlatformChars
(
env
,
port
,
printerPort
);
return
defaultArray
;
}
...
...
@@ -794,6 +856,7 @@ Java_sun_print_Win32PrintService_getDefaultSettings(JNIEnv *env,
::
ClosePrinter
(
hPrinter
);
env
->
ReleaseIntArrayElements
(
defaultArray
,
saveFormats
,
0
);
JNU_ReleaseStringPlatformChars
(
env
,
printer
,
printerName
);
JNU_ReleaseStringPlatformChars
(
env
,
port
,
printerPort
);
return
defaultArray
;
}
...
...
@@ -863,7 +926,6 @@ Java_sun_print_Win32PrintService_getDefaultSettings(JNIEnv *env,
defIndices
[
8
]
=
pDevMode
->
dmColor
;
}
GlobalFree
(
pDevMode
);
::
ClosePrinter
(
hPrinter
);
...
...
@@ -873,8 +935,6 @@ Java_sun_print_Win32PrintService_getDefaultSettings(JNIEnv *env,
JNU_ReleaseStringPlatformChars
(
env
,
port
,
printerPort
);
return
defaultArray
;
CATCH_BAD_ALLOC_RET
(
NULL
);
}
...
...
@@ -891,6 +951,9 @@ Java_sun_print_Win32PrintService_getJobStatus(JNIEnv *env,
int
ret
=
0
;
LPTSTR
printerName
=
(
LPTSTR
)
JNU_GetStringPlatformChars
(
env
,
printer
,
NULL
);
if
(
printerName
==
NULL
)
{
return
-
1
;
}
// Start by opening the printer
if
(
!::
OpenPrinter
(
printerName
,
&
hPrinter
,
NULL
))
{
...
...
@@ -959,13 +1022,15 @@ static jfieldID getIdOfLongField(JNIEnv *env, jobject self,
jclass
myClass
=
env
->
GetObjectClass
(
self
);
jfieldID
fieldId
=
env
->
GetFieldID
(
myClass
,
fieldName
,
"J"
);
DASSERT
(
fieldId
!=
0
);
return
fieldId
;
}
static
inline
HANDLE
getHPrinter
(
JNIEnv
*
env
,
jobject
self
)
{
jfieldID
fieldId
=
getIdOfLongField
(
env
,
self
,
HPRINTER_STR
);
if
(
fieldId
==
(
jfieldID
)
0
)
{
return
(
HANDLE
)
NULL
;
}
return
(
HANDLE
)(
env
->
GetLongField
(
self
,
fieldId
));
}
...
...
@@ -979,6 +1044,9 @@ Java_sun_print_Win32PrintJob_startPrintRawData(JNIEnv *env,
HANDLE
hPrinter
;
DOC_INFO_1
DocInfo
;
LPTSTR
printerName
=
(
LPTSTR
)
JNU_GetStringPlatformChars
(
env
,
printer
,
NULL
);
if
(
printerName
==
NULL
)
{
return
false
;
}
DASSERT
(
jobname
!=
NULL
);
LPTSTR
lpJobName
=
(
LPTSTR
)
JNU_GetStringPlatformChars
(
env
,
jobname
,
NULL
);
LPTSTR
jname
=
_tcsdup
(
lpJobName
);
...
...
@@ -1016,8 +1084,12 @@ Java_sun_print_Win32PrintJob_startPrintRawData(JNIEnv *env,
// store handle
jfieldID
fieldId
=
getIdOfLongField
(
env
,
peer
,
HPRINTER_STR
);
if
(
fieldId
==
(
jfieldID
)
0
)
{
return
false
;
}
else
{
env
->
SetLongField
(
peer
,
fieldId
,
reinterpret_cast
<
jlong
>
(
hPrinter
));
return
true
;
}
}
...
...
@@ -1039,6 +1111,9 @@ Java_sun_print_Win32PrintJob_printRawData(JNIEnv *env,
try
{
data
=
(
jbyte
*
)
env
->
GetPrimitiveArrayCritical
(
dataArray
,
0
);
if
(
data
==
NULL
)
{
return
false
;
}
// Send the data to the printer.
if
(
!
::
WritePrinter
(
hPrinter
,
data
,
count
,(
LPDWORD
)
&
dwBytesWritten
))
{
...
...
src/windows/native/sun/windows/awt_new.cpp
浏览文件 @
4bc3c7f5
...
...
@@ -149,7 +149,7 @@ void
handle_bad_alloc
(
void
)
{
if
(
jvm
!=
NULL
)
{
JNIEnv
*
env
=
(
JNIEnv
*
)
JNU_GetEnv
(
jvm
,
JNI_VERSION_1_2
);
if
(
env
!=
NULL
)
{
if
(
env
!=
NULL
&&
!
env
->
ExceptionCheck
()
)
{
JNU_ThrowOutOfMemoryError
(
env
,
"OutOfMemoryError"
);
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录