0

FTL を使用して JVM スレッド ダンプを生成するコードを作成しようとしていますが、TreeMap の反復処理に問題があります。

これは私のアクション クラスのスニペットです。

- - -始める - - -

public AppsnapAction() {
    traces = new TreeMap<Thread, StackTraceElement[]>(COMP);
    traces.putAll(Thread.getAllStackTraces());
}

問題のメソッド。

public Map<Thread, StackTraceElement[]> getAppTraces() {
 //  log.debug("HelloMe..in getAppTraces"+ traces);
    return traces;
}

- - 終わり - - - -

これは FTL のスニペットです。

- - -始める - - -

<h1>My Trace</h1>
<#list appTraces?keys as trace>
<h4><a name="${trace_index}">${trace}</a></h4>
<pre>
<#list appTraces[trace] as traceline>
   at ${traceline}
</#list>
</pre>
    </#list>

- - - 終わり - - - -

コードは次の行で中断されます: "<#list appTraces[trace] as traceline>"

ただし、次の例外があります。

2013-09-15 22:58:35,701 [http-8080-1] エラー freemarker.runtime -

get(Thread[ContainerBackgroundProcessor[StandardEngine[Catalina]],5,main]) が java.util.TreeMap のインスタンスで失敗しました 問題のある命令:


==> appTraces[trace] を traceline としてリストします [/resources/templates/td-Page.ftl の 42 行目、5 列目]


プログラマー向けの Java バックトレース:


freemarker.template.TemplateModelException: get(Thread[ContainerBackgroundProcessor[StandardEngine[Catalina]],5,main]) failed on instance of java.util.TreeMap
at freemarker.ext.beans.BeanModel.get(BeanModel.java:223)
at freemarker.core.DynamicKeyName.dealWithStringKey(DynamicKeyName.java:136)
at freemarker.core.DynamicKeyName._getAsTemplateModel(DynamicKeyName.java:94)
at freemarker.core.Expression.getAsTemplateModel(Expression.java:89)
at freemarker.core.IteratorBlock.accept(IteratorBlock.java:94)
at freemarker.core.Environment.visit(Environment.java:213)
Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Thread
at com.jivesoftware.helloworld.action.AppsnapAction$1.compare(AppsnapAction.java:1)
at java.util.TreeMap.getEntryUsingComparator(TreeMap.java:351)
at java.util.TreeMap.getEntry(TreeMap.java:322)
at java.util.TreeMap.get(TreeMap.java:255)
at freemarker.ext.beans.MapModel.invokeGenericGet(MapModel.java:127)
at freemarker.ext.beans.BeanModel.get(BeanModel.java:185)
... 202 more

内側のループを反復する方法について何か考えはありますか?

4

1 に答える 1