Java 9でスレッドを使用してスタックトレースを取得するにはどうすればよいですか?
Java 9 StackWalkerを追加しました 現在のスレッドスタックにアクセスするための標準APIを提供するクラス。以前のJavaバージョンでは、 Throwable ::getStackTraceを使用できます。 、 Thread ::getStackTrace 、および SecurityManager ::GetClassContext スレッドスタックを取得するためのメソッドを提供しました。
Thread.getStackTrace() メソッドは、スレッドのスタックダンプを表すスタックトレース要素の配列を返します( StackTraceElement [] )。配列の最初の要素はスタックの最上位を表し、シーケンスの最後のメソッド呼び出しである可能性があり、配列の最後の要素はスタックの最下部を表し、シーケンスの最初のメソッド呼び出しである可能性があります。
構文
public StackTraceElement[] getStackTrace()
例
import java.lang.StackWalker.Option; public class GetStackTraceTest { public static void main(String args[]) { GetStackTraceTest.testPrintCurrnentStackTrace(); GetStackTraceTest.testShowReflectFrames(); } // get StackTrace using Thread public static void testPrintCurrnentStackTrace() { StackTraceElement[] stack = Thread.currentThread().getStackTrace(); for(StackTraceElement element : stack) { System.out.println(element); } } // SHOW_REFLECT_FRAMES public static void print(StackWalker stackWalker) { stackWalker.forEach(stackFrame -> System.out.printf("%6d| %s -> %s %n", stackFrame.getLineNumber(), stackFrame.getClassName(), stackFrame.getMethodName())); } public static void testShowReflectFrames() { final StackWalker stackWalker = StackWalker.getInstance(Option.SHOW_REFLECT_FRAMES); print(stackWalker); } }
出力
java.base/java.lang.Thread.getStackTrace(Thread.java:1654) GetStackTraceTest.testPrintCurrnentStackTrace(GetStackTraceTest.java:10) GetStackTraceTest.main(GetStackTraceTest.java:5) 17| GetStackTraceTest -> print 25| GetStackTraceTest -> testShowReflectFrames 6| GetStackTraceTest -> main
-
Javaを使用している場合のif内でIllegalArgumentExceptionを処理する方法
IllegalArgumentExceptionを引き起こすメソッドを使用している間、それらの正当な引数を知っているので、事前にif-conditionを使用して引数を制限/検証し、例外を回避できます。 ifステートメントを使用して、メソッドの引数値を制限できます。たとえば、メソッドが特定の範囲の値を受け入れる場合、メソッドを実行する前にifステートメントを使用して引数の範囲を確認できます。 例 次の例は、 setPriority()によって引き起こされるIllegalArgumentExceptionを処理します ifステートメントを使用するメソッド。 import java.util.
-
Javaを使用してフォルダからディレクトリ(のみ)を取得するにはどうすればよいですか?
ListFiles()メソッドは、現在の(File)オブジェクトによって表されるパス内のすべてのファイル(およびディレクトリ)のオブジェクト(抽象パス)を保持する配列を返します。 ファイルフィルターインターフェイスは、これをパラメーターとしてlistFiles()メソッドに渡すことができるパス名のフィルターです。このメソッドは、渡されたフィルターに渡されたファイル名をフィルターします。 フォルダ内のディレクトリを取得するには、ディレクトリのみを受け入れるFileFilterを実装し、それをパラメータとしてlistFiles()メソッドに渡します。 以下は、ExampleDirectory