Java
 Computer >> コンピューター >  >> プログラミング >> Java

Java 9で現在のスレッドのすべてのスタックフレームを表示するにはどうすればよいですか?


スタックウォーキングAPI コールスタックから情報をトラバースして抽出するための柔軟なメカニズムを提供できるため、遅延した方法でフレームをフィルタリングしてアクセスできます。 StackWalker classはStackWalkingAPIへのエントリポイントです。スタックトレースは、呼び出しスタックを表しています。 各要素がメソッドを表す特定の時点でのk 呼び出し 。スレッドの開始から生成されるまでのすべての呼び出しが含まれます。

以下の例では、StackWalker APIを使用して、現在のスレッドのすべてのスタックフレームを印刷/表示できます。

import java.lang.StackWalker.StackFrame;
import java.lang.reflect.Method;
import java.util.List;
import java.util.stream.Collectors;

public class StackWalkerTest {
   public static void main(String args[]) throws Exception {
      Method test1Method = Helper1.class.getDeclaredMethod("test1", (Class[])null);
      test1Method.invoke(null, (Object[]) null);
   }
}

// Helper1 class
class Helper1 {
   protected static void test1() {
      Helper2.test2();
   }
}

// Helper2 class
class Helper2 {
   protected static void test2() {
      List<StackFrame> stack = StackWalker.getInstance().walk((s) -> s.collect(Collectors.toList()));
      for(StackFrame frame : stack) {
         System.out.println(frame.getClassName() + " " + frame.getLineNumber() + " " +    frame.getMethodName());
      }
   }
}

出力

Helper2 23 test2
Helper1 16 test1
StackWalkerTest 9 main

  1. JavaでのSwingWorkerクラスの重要性は何ですか?

    SwingWorker クラスを使用すると、非同期を実行できます タスク ワーカースレッド(長時間実行タスクなど)で、イベントディスパッチスレッド(EDT )からSwingコンポーネントを更新します。 ) タスクの結果に基づきます。 Java1.6バージョンで導入されました。 SwingWorkerクラス java.swing.SwingWorker クラスはタスクワーカーであり、時間のかかるタスクをバックグラウンドで実行します。 SwingWorker インスタンスは3つのスレッドと相互作用します。現在 スレッド 、ワーカースレッド 、およびイベントディスパッチスレッド(E

  2. JavaでのSwingUtilitiesクラスの重要性は何ですか?

    Javaでは、Swingコンポーネントが画面に表示された後、それらはイベント処理スレッドと呼ばれる1つのスレッドでのみ操作できます。 。別のブロックにコードを記述し、このブロックにイベントへの参照を与えることができます 処理 スレッド 。 SwingUtilities クラスには、 invokeAndWait()という2つの重要な静的メソッドがあります。 およびinvokeLater() コードのブロックへの参照をイベントに配置するために使用します キュー 。 構文 public static void invokeAndWait(Runnable doRun) throws Interr