- - PR -
Jcomを使用したExcelのプロセス停止について
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 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のプロセス関係に詳しい方がいましたら、ご教授下さい。 | ||||||||
|
投稿日時: 2007-01-22 18:03
詳細は hs_err_pid2752.log に記載されていると書いてありますので、確認してみてはいかがでしょう。
| ||||||||
|
投稿日時: 2007-01-22 18:20
普通は、Excel::Workbook を Close してから relese(); 普通は、Excel::Application を Quit してから release(); # ReleaseManager は書いていないだけですよね。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2007-01-22 18:38
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. | ||||||||
|
投稿日時: 2007-01-22 18:45
こんにちは。
HRESULT(0x800401F0)の意味は 「CoInitialize は呼び出されていません。 」です。 とりあえず、Releaseしたオブジェクトを使うのはやめましょう。 | ||||||||
|
投稿日時: 2007-01-22 19:22
当然、release() の前でやっていますよね? _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2007-01-22 19:28
はい、そのようにしました。 現在、swtを使用してプロセスを殺す方法を模索中です。 | ||||||||
|
投稿日時: 2007-01-22 20:55
そのようにした?実際のコード出してみて。 まさかと思うけど指摘された本質がわかっていないような気がしたので確認したい。 |