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)에 있던 메소드의 정보와 예외 결과를 화면에 출력함.
예외 상황을 분석하기 위한 용도로 사용 (개발자에게 디버깅 할 수 있는 힌트를 제공)
try {
} catch (Exception e) {
e.printStackTrace();
}
사용하지 말아야 하는 이유
- call 할 경우, System.err로 쓰여져서 제어하기가 힘듦.
- java 리플렉션을 사용하여 추적하는 것이라, 많은 오버헤드가 발생할 수 있음.
- 서버에서 스택정보를 취합하기 때문에 서버에 부하가 발생할 수 있음.
- 출력이 어디로 가는지 파악하기가 어려움 (톰켓같은 경우, catalina.out에 남음)
- 관리가 힘듦. (보통 log4j, logback과 같은 로깅 라이브러리를 사용하여,
로그 패턴 및 로그 메세지를 지정 및 콘솔로그 / 파일로그 형태로 관리할 수 있음)