- PR -

Jcomを使用したExcelのプロセス停止について

投稿者投稿内容
trick
常連さん
会議室デビュー日: 2003/11/14
投稿数: 31
投稿日時: 2007-01-22 17:58
trickと申します。

ExcelのCOMブリッジであるjcom2.2.4を使用し、Excelの帳票を作成、ダウンロードさせるPGを製造しています。
Excelの出力まではうまく行くのですが、キャンセル時にExcelを停止し、プロセスを殺すのがうまく行きません。
ログは、以下のように出力されます。

quitに失敗
#
# An unexpected error has been detected by HotSpot Virtual Machine:
#
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x00000000, pid=2752, tid=3004
#
# Java VM: Java HotSpot(TM) Client VM (1.5.0_10-b03 mixed mode)
# Problematic frame:
# C 0x00000000
#
# An error report file with more information is saved as hs_err_pid2752.log
#
# If you would like to submit a bug report, please visit:
# http://java.sun.com/webapps/bugreport/crash.jsp
#

catchしたときのeをtoString()すると、以下のメッセージが表示されます。

(java.lang.String) jp.ne.so_net.ga2.no_ji.jcom.JComException: IDispatch::GetIDsOfNames(Quit) failed HRESULT=0x800401F0

ソースは、以下のようにしています。

public void excelQuit() {
try {
xlSheet.release();
xlSheets.release();
xlBook.release();
xlBooks.release();
excel.release();
excel.Quit();   ←ここでException
} catch (Exception e) {
System.out.println("quitに失敗");
}
}

環境
Eclipse3.2
Tomcat5.5
JDK1.5.0_10
Struts1.2.9

もしJcomまたはJavaで同じようなことをした事のある方、Windowsのプロセス関係に詳しい方がいましたら、ご教授下さい。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2007-01-22 18:03
詳細は hs_err_pid2752.log に記載されていると書いてありますので、確認してみてはいかがでしょう。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-01-22 18:20
引用:

trickさんの書き込み (2007-01-22 17:58) より:

xlSheet.release();
xlSheets.release();
xlBook.release();
xlBooks.release();
excel.release();
excel.Quit();   ←ここでException


普通は、Excel::Workbook を Close してから relese();
普通は、Excel::Application を Quit してから release();

# ReleaseManager は書いていないだけですよね。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
trick
常連さん
会議室デビュー日: 2003/11/14
投稿数: 31
投稿日時: 2007-01-22 18:38
引用:

じゃんぬねっとさんの書き込み (2007-01-22 18:20) より:
引用:

trickさんの書き込み (2007-01-22 17:58) より:

xlSheet.release();
xlSheets.release();
xlBook.release();
xlBooks.release();
excel.release();
excel.Quit();   ←ここでException


普通は、Excel::Workbook を Close してから relese();
普通は、Excel::Application を Quit してから release();

# ReleaseManager は書いていないだけですよね。





WorkbookまたはWorkBooksをCloseすると、以下のExceptionが発生します。

(java.lang.String) jp.ne.so_net.ga2.no_ji.jcom.JComException: IDispatch::GetIDsOfNames(Close) failed HRESULT=0x800401F0

また、hs_err_pid2752.logを確認してみたのですが、スタックトレースでした。
内容が大きいので全ては載せませんが、以下のような文言が出力されています。

VM state:not at safepoint (normal execution)

VM Mutex/Monitor currently owned by a thread: None

Heap
def new generation total 1024K, used 609K [0x02bd0000, 0x02ce0000, 0x030b0000)
eden space 960K, 63% used [0x02bd0000, 0x02c680e0, 0x02cc0000)
from space 64K, 2% used [0x02cc0000, 0x02cc0588, 0x02cd0000)
to space 64K, 0% used [0x02cd0000, 0x02cd0000, 0x02ce0000)
tenured generation total 12448K, used 7466K [0x030b0000, 0x03cd8000, 0x06bd0000)
the space 12448K, 59% used [0x030b0000, 0x037faa68, 0x037fac00, 0x03cd8000)
compacting perm gen total 15616K, used 15490K [0x06bd0000, 0x07b10000, 0x0abd0000)
the space 15616K, 99% used [0x06bd0000, 0x07af09b8, 0x07af0a00, 0x07b10000)
No shared spaces configured.
Tdnr_Sym
ぬし
会議室デビュー日: 2005/09/13
投稿数: 464
お住まい・勤務地: 明石・神戸
投稿日時: 2007-01-22 18:45
こんにちは。

HRESULT(0x800401F0)の意味は
「CoInitialize は呼び出されていません。 」です。

とりあえず、Releaseしたオブジェクトを使うのはやめましょう。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-01-22 19:22
引用:

trickさんの書き込み (2007-01-22 18:38) より:

WorkbookまたはWorkBooksをCloseすると、以下のExceptionが発生します。


当然、release() の前でやっていますよね?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
trick
常連さん
会議室デビュー日: 2003/11/14
投稿数: 31
投稿日時: 2007-01-22 19:28
引用:

じゃんぬねっとさんの書き込み (2007-01-22 19:22) より:
引用:

trickさんの書き込み (2007-01-22 18:38) より:

WorkbookまたはWorkBooksをCloseすると、以下のExceptionが発生します。


当然、release() の前でやっていますよね?





はい、そのようにしました。
現在、swtを使用してプロセスを殺す方法を模索中です。
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2007-01-22 20:55
引用:

trickさんの書き込み (2007-01-22 19:28) より:
はい、そのようにしました。
現在、swtを使用してプロセスを殺す方法を模索中です。


そのようにした?実際のコード出してみて。
まさかと思うけど指摘された本質がわかっていないような気がしたので確認したい。

スキルアップ/キャリアアップ(JOB@IT)