- PR -

プログラムの呼び出し元を調べる方法

1
投稿者投稿内容
インスパ
大ベテラン
会議室デビュー日: 2002/08/30
投稿数: 125
投稿日時: 2005-05-16 11:24
プログラムの呼び出し元を調べる方法を調べているのですがわからないので
ご存知の方がいらっしゃればご教授願います。

例えば以下のようにHoge1.mainとHoge2.mainを呼び出しており
Hoge1,Hoge2の内部では同じクラスやメソッドを呼び出しております
この内部で呼ばれているメソッドにて呼び出し元ををたどりHoge1、Hoge2
どちらから呼ばれたのかを調べたいのです。

import Hoge1;
import Hoge2;

public class Calltest {
int iret1 = Hoge1.main();
int iret2 = Hoge2.main();
}
シュン
ぬし
会議室デビュー日: 2004/01/06
投稿数: 328
お住まい・勤務地: 東京都
投稿日時: 2005-05-16 11:35
例外を生成して、StackTraceElementを取り出すと調べられますよ。
一応サンプルを。

コード:
public class StackTest {

	public static void main(String[] args) {
		Hoge1.main();
		Hoge2.main();
	}
	
	public static void checkStackRoot(){
		StackTraceElement[] es = new Exception().getStackTrace();
		System.out.println(es[1].getClassName());
	}
	
	
	public static class Hoge1{
		public static void main(){
			checkStackRoot();
		}
	}
	
	public static class Hoge2{
		public static void main(){
			checkStackRoot();
		}
	}
}


未記入
ぬし
会議室デビュー日: 2004/09/17
投稿数: 667
投稿日時: 2005-05-16 11:52
ちなみに、1.5 以降では、こんな書き方もできるようになりました。

StackTraceElement[] es = Thread.currentThread().getStackTrace();
インスパ
大ベテラン
会議室デビュー日: 2002/08/30
投稿数: 125
投稿日時: 2005-05-16 14:50
シュンさんどうもありがとうございました、ご指摘の方法でいけそうです。
後ひとつ教えてほしいのですが...

es[]を検索して特定の文字列が含まれているか検索をしたいのですが
下記のようにCASTしようとしてもコンパイルエラーとなります。
どのようにすれば特定の文字列と比較できるのかご存知でしたらお教え願います。

StackTraceElement[] es = new Exception().getStackTrace();
for (int i = 0; i < es.length; i++){
  String strTrace = (String) es[i];  <<--この部分です
  int n = strTrace.indexOf("SearchString");
}
インスパ
大ベテラン
会議室デビュー日: 2002/08/30
投稿数: 125
投稿日時: 2005-05-16 15:06
文字列変換に関して自己解決です

String strTrace = (String) es[i].toString();

これでよかったんですね、どうもありがとうございました。
1

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