📄 releasemanager.java
字号:
package jp.ne.so_net.ga2.no_ji.jcom;
import java.util.*;
/**
* ReleaseManager 嶲徠僇僂儞僞娗棟僋儔僗丅
* 夝曻偟側偗傟偽側傜側偄僆僽僕僃僋僩傪娗棟偟傑偡丅
*
* 斾妑揑娙扨側僾儘僌儔儉偱偼埲壓偺宍偱棙梡偟偰壓偝偄丅
* <pre>
* // 斾妑揑抁柦偺僾儘僌儔儉
* ReleaseManager rm = new ReleaseManager();
* try {
* IDispatch foo = new IDispatch(rm ,progid);
* // ...
* } catch(JComException e) {
* e.printStackTrace();
* } finally {
* rm.release();
* }
* </pre>
* 傑偨丄僒乕僶乕傾僾儕働乕僔儑儞傗丄暋嶨偱挿帪娫摦嶌偡傞傾僾儕働乕僔儑儞
* 偱偼丄ReleaseManager偺惗惉偐傜release()傪峴偆傑偱偵丄僆僽僕僃僋僩傪夝曻偟側
* 偗傟偽側傜側偄応崌偑偁傝傑偡丅僆僽僕僃僋僩偑夝曻偟側偄偲丄儊儌儕傪埑敆偟偰
* 偟傑偆偐傜偱偡丅偦偺応崌偼丄揔摉側張棟扨埵傪push()偲pop()偱埻傓偙偲偵傛傝丄
* 偦偺拞偱妋曐偝傟偨僆僽僕僃僋僩傪夝曻偟傑偡丅
* push()偲pop()偼昁偢懳偵側傞傛偆偵偟偰偔偩偝偄丅
* 偦偺懳傪 push() pop() push() pop()偲偄偆傆偆偵丄暋悢夞屇傇偙偲偑偱偒傑偡丅
* 傑偨丄push() push() pop() pop()偲偄偆傆偆偵丄僱僗僩偡傞偙偲傕偱偒傑偡丅
* 埲壓偺椺偱偼丄for暥偺扨埵偱僆僽僕僃僋僩傪夝曻偟偰偄傑偡丅
* <pre>
* // 斾妑揑庻柦偺挿偄僾儘僌儔儉
* ReleaseManager rm = new ReleaseManager();
* try {
* IDispatch foo = new IDispatch(rm ,progid);
* // ...
* for(int i=0; i<files.length; i++) {
* rm.push();
* // ...
* rm.pop(); // for暥偺拞偱惗惉偝傟偨僆僽僕僃僋僩傪夝曻
* }
* } catch(JComException e) {
* e.printStackTrace();
* } finally {
* rm.release();
* }
* </pre>
* 暋悢偺俠俷俵傪摨帪偵埖偆偲偒丄偦偺惗惉偲夝曻偺僞僀儈儞僌偑堎側傞応崌偑偁傝傑偡丅
* 椺偊偽丄侾偮偺俢俛傪俠俷俵偲偟偰埖偄丄暋悢偺俤倃俠俤俴傕傑偨俠俷俵偲偟偰埖偆応崌偱偡丅
* 俢俛偼嵟弶偵侾夞惗惉偡傞偺偵懳偟丄俤倃俠俤俴偼暋悢夞惗惉偡傞偙偲偵側傞偐傜偱偡丅
* 偦偺応崌偼暋悢偺<code> ReleaseManager </code>傪惗惉偟丄偦傟偧傟偵妱傝摉偰傞偙偲偵傛傝丄
* 僆僽僕僃僋僩偺夝曻偵偮偄偰僉儊偺嵶偐偄惂屼傪峴偆偙偲偑偱偒傑偡丅
* 暿偺俠俷俵偵懳偟偰丄摨偠<code> ReleaseManager </code>傪巊偆偙偲傕丄堎側傞
* <code> ReleaseManager </code>傪巊偆偙偲傕偱偒傑偡丅傑偨丄惗惉偡傞売強傪
* 暿偺僽儘僢僋乮儊僜僢僪丄僗儗僢僪摍乯偵偡傞偙偲傕偱偒傑偡丅
* <pre>
* // 庻柦偺堎側傞暋悢偺俠俷俵傪埖偆僾儘僌儔儉乮椺侾乯
* ReleaseManager rmDb = new ReleaseManager();
* ReleaseManager rmExcel = new ReleaseManager();
* try {
* IDispatch comDB = new IDispatch(rmDb ,"foo.DB");
* IDispatch comExcel = new IDispatch(rmExcel ,"Excel.Application");
* // ...
* for(int i=0; i<table.length; i++) {
* rmExcel.push();
* // ...
* rmExcel.pop(); //俤倃俠俤俴僆僽僕僃僋僩偺傒夝曻
* }
* } catch(JComException e) {
* e.printStackTrace();
* } finally {
* rmExcel.release();
* rmDb.release();
* }
* </pre>
* <pre>
* // 庻柦偺堎側傞暋悢偺俠俷俵傪埖偆僾儘僌儔儉(椺俀)
* ReleaseManager rmDB = new ReleaseManager();
* try {
* IDispatch comDB = new IDispatch(rmDB ,"foo.DB");
* rmDB.push();
* ReleaseManager rmExcel = new ReleaseManager();
* try {
* IDispatch comExcel = new IDispatch(rmExcel ,"Excel.Application");
* // ...
* for(int i=0; i<table.length; i++) {
* rmExcel.push();
* rmDB.push();
* // ...
* rmDB.pop(); // 俢俛僆僽僕僃僋僩偺傒夝曻
* rmExcel.pop(); // 俤倃俠俤俴僆僽僕僃僋僩傕夝曻
* }
* } catch(JComException e) {
* e.printStackTrace();
* } finally {
* rmExcel.release();
* }
* rmDB.pop(); // 俢俛僆僽僕僃僋僩偺傒夝曻
* } catch(JComException e) {
* e.printStackTrace();
* } finally {
* rmDB.release();
* }
* </pre>
@author Yoshinori Watanabe(搉曈 媊懃)
@version 2.00, 2000/06/25
Copyright(C) Yoshinori Watanabe 1999-2000. All Rights Reserved.
@see IDispatch
@see IUnknown
*/
public class ReleaseManager {
private Stack frames;
private Stack curFrame;
/**
ReleaseManager傪嶌惉偟傑偡丅
夝曻偟側偗傟偽側傜側偄俠俷俵僆僽僕僃僋僩傪娗棟偟傑偡丅
*/
public ReleaseManager() {
frames = new Stack();
curFrame = new Stack();
frames.push(curFrame);
}
/**
IUnknown 傪尰嵼偺僗僞僢僋偵捛壛偟傑偡丅
*/
public void add(IUnknown jcom) {
curFrame.push(jcom);
}
/**
怴偟偄僗僞僢僋傪惗惉偟傑偡丅
*/
public void push() {
curFrame = new Stack();
frames.push(curFrame);
}
/**
尰嵼偺僗僞僢僋忋偺IUnknown傪夝曻偟傑偡丅
偦偺屻丄1偮慜偺僗僞僢僋偵栠偟傑偡丅
*/
public void pop() {
if(curFrame==null) return;
// 尰嵼偺僼儗乕儉偵棴傑偭偨JCom傪release偡傞
while( ! curFrame.empty() ) {
((IUnknown)curFrame.pop()).release();
}
frames.pop();
// 僼儗乕儉傪堦偮慜偵栠偡
try {
curFrame = (Stack)frames.peek();
} catch(EmptyStackException e) {
curFrame = null;
}
}
/**
偡傋偰偺僗僞僢僋忋偺IUnknown傪夝曻偟傑偡丅
*/
public void release() {
while( ! frames.empty() ) {
pop();
}
}
/**
偡傋偰偺僗僞僢僋忋偺IUnknown傪夝曻偟傑偡丅
俰倎倴倎倁俵偼僾儘僌儔儉廔椆帪偵<code> filnalize() </code>傪屇傇偙偲傪
曐徹偟偰偄傑偣傫丅
捠忢偼丄try乣catch暥偱JComException傪僉儍僢僠偟丄
finally暥偱release()傪柧帵揑偵屇傇傛偆偵偟偰偔偩偝偄丅
*/
public void finalize() {
release();
}
/**
撪晹偱曐帩偟偰偄傞IUnknown僋儔僗丄傑偨偼偦傟偐傜宲彸偟偨僋儔僗偺僆僽僕僃僋僩
傪埲壓偺宍偱昞帵偟傑偡丅
侾俇恑悢偼僀儞僞乕僼僃乕僗偺億僀儞僞丄
妵屖偺拞偺悢抣偼嶲徠僇僂儞僞偺悢丄偦偺師偼僋儔僗柤偱偡丅
擟堄偺売強偱偺僆僽僕僃僋僩偺忬懺傪僗僫僢僾僔儑僢僩揑偵尒傞偙偲偑偱偒傑偡丅
<pre>
{
{
4769e4(1)jp.ne.so_net.ga2.no_ji.jcom.excel8.ExcelApplication
476eb8(1)jp.ne.so_net.ga2.no_ji.jcom.IDispatch
477c98(1)jp.ne.so_net.ga2.no_ji.jcom.IDispatch
477ed4(1)jp.ne.so_net.ga2.no_ji.jcom.IDispatch
478004(1)jp.ne.so_net.ga2.no_ji.jcom.IUnknown
478694(2)jp.ne.so_net.ga2.no_ji.jcom.IDispatch
4788f4(2)jp.ne.so_net.ga2.no_ji.jcom.IDispatch
478b30(2)jp.ne.so_net.ga2.no_ji.jcom.IDispatch
478694(2)jp.ne.so_net.ga2.no_ji.jcom.IDispatch
4788f4(2)jp.ne.so_net.ga2.no_ji.jcom.IDispatch
478b30(2)jp.ne.so_net.ga2.no_ji.jcom.IDispatch
}
}</pre>
*/
public String toString() {
String result = "{\n";
for(int i=0; i<frames.size(); i++) {
Stack s = (Stack)frames.elementAt(i);
result += "{\n";
for(int j=0; j<s.size(); j++) {
IUnknown p = (IUnknown)s.elementAt(j);
result += p.toString() + "\n";
}
result += "}\n";
}
result += "}\n";
return result;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -