public class BedahStack {
    public static void main(String[] args) {
        try {
            prosesPesanan(42);
        } catch (IllegalStateException e) {
            // Tangkap, lalu bedah bagian demi bagian secara deterministik
            System.out.println("Jenis exception : " + e.getClass().getName());
            System.out.println("Pesan           : " + e.getMessage());

            StackTraceElement frame0 = e.getStackTrace()[0];
            System.out.println("Frame paling atas: " + frame0.getMethodName()
                    + " di baris " + frame0.getLineNumber());

            StackTraceElement frame1 = e.getStackTrace()[1];
            System.out.println("Frame berikutnya: " + frame1.getMethodName()
                    + " di baris " + frame1.getLineNumber());
        }
        System.out.println("Program tetap berjalan sampai selesai.");
    }

    static void prosesPesanan(int id) {
        validasiStok(id);
    }

    static void validasiStok(int id) {
        // Sumber masalah sesungguhnya ada di sini
        throw new IllegalStateException("Stok habis untuk pesanan " + id);
    }
}
