জাভা 9 StackWalker যোগ করেছে বর্তমান থ্রেড স্ট্যাক অ্যাক্সেস করার জন্য একটি আদর্শ API প্রদান করার জন্য ক্লাস। পূর্ববর্তী জাভা সংস্করণগুলিতে, আমরা থ্রোয়েবল::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