BackEnd/JAVA

JAVA JFrame / Exception 예외처리 / printStackTrace()

H_Develop 2022. 8. 1. 16:56

JFrame(그래픽 처리를 위한 자바 스윙)에서 사용된 익명클래스 Events Listener 구현

 

import java.awt.Button;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

// JFrame ( 그래픽 처리를 위한 자바 스윙 ) 에서 사용된 익명 클래스 Events Listener 구현

public class Test02 {

	public static void main(String[] args) {

		Frame t = new Frame();
		Button btn = new Button("종료"); //버튼 생성 및 글씨 추가
		t.setSize(300,200);	// JFrame에 들어 있는 함수를 불러서 사용
		t.add(btn); //버튼 추가
		t.setVisible(true); //윈도우 창 생성
		btn.addActionListener((ActionListener) new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				System.exit(0);
			}
		});
	}
}

 

 

Try - Catch (예외처리)

프로그램 실행 도중 예외(에러)가 발생하면, 그 시점에서 프로그램이 강제 종료된다.

올바른 판단이지만, 때로는 예상할 수 없는 가벼운 오류이거나,

프로그램을 종료시키지 않고 그 이후 프로세스를 진행시키는 것이 더 좋을 수 있다. <= FailSafe 기법

 

public class Test03 {
    public static void main(String[] args) {
        int n=0;
        int result = 0;
        try{
        result = 10/n; //error
        } catch(Exception e){
            e.printStackTrace(); //오류 보임
            System.out.println("오류 발생");
        }             
        System.out.println(result);         
    }
}

오류와 다음 실행의 0이 나옴

 

import java.util.Scanner;

public class Test06 {
    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);
        String a = scan.next();
        try {
            System.out.println("결과 :" + Integer.parseInt(a));
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("결과 :" + a + "는 정수가 아닙니다.");
        }
        scan.close();
    }
}

 

 

e.printStackTrace()

 

예외 발생 당시의 호출스택(Call Stack)에 있던 메소드의 정보예외 결과를 화면에 출력함.

예외 상황을 분석하기 위한 용도로 사용 (개발자에게 디버깅 할 수 있는 힌트를 제공)

https://tgyun615.com/59

try { 

} catch (Exception e) {

 e.printStackTrace();

}

사용하지 말아야 하는 이유

 - call 할 경우, System.err로 쓰여져서 제어하기가 힘듦.

 - java 리플렉션을 사용하여 추적하는 것이라, 많은 오버헤드가 발생할 수 있음.

 - 서버에서 스택정보를 취합하기 때문에 서버에 부하가 발생할 수 있음.

 - 출력이 어디로 가는지 파악하기가 어려움 (톰켓같은 경우, catalina.out에 남음)

 - 관리가 힘듦. (보통 log4j, logback과 같은 로깅 라이브러리를 사용하여,

   로그 패턴 및 로그 메세지를 지정 및 콘솔로그 / 파일로그 형태로 관리할 수 있음)