1. 이벤트 처리
실제로, 이벤트 처리의 이름은 자연스럽게 MFC의 메시지 응답 메커니즘에 대해 생각됩니다. 내가 이해하는 한, 그들은 남부 오렌지와 북부 감귤류의 상황으로 간주되어야합니다. Java에서 이벤트 처리의 "새로운 병"은 MFC의 메시지 응답이어야한다고 생각합니다.
소위 "이벤트"는 키보드 키, 마우스 클릭 등과 같은 변경 사항입니다. 이는 작업으로 인해 특정 상태가 변경되거나 그에 따라 응답해야 할 사항이 변경됩니다. Java의 이벤트를 버튼, 마우스, 키보드, 창 및 기타 이벤트의 여러 범주로 나눌 수 있습니다.
이벤트 처리 모델
1. 상속 이벤트 처리 모델 (JDK1.0)
JDK1.0에서 이벤트 처리는 상속을 기반으로합니다. 이벤트는 먼저 구성 요소로 전송 된 다음 컨테이너 레벨을 따라 위쪽으로 전파됩니다. 구성 요소에 의해 처리되지 않은 이벤트는 자동으로 구성 요소의 컨테이너로 계속 전파됩니다. -이것은 MFC의 원래 이벤트 응답 순서 또는 다형성 응답 메커니즘과 일치하는 것으로 보이며, 나중에 언급 된 프록시 기반 이벤트 처리 메커니즘은 MFC 콜백 메커니즘과 일치하는 것으로 보입니다.
특정 치료 방법
Action () 메소드 또는 handleEvent () 메소드를 호출하여 프로그램이 실행될 때 발생하는 이벤트를 가져오고 구성 요소에서 발생하는 모든 이벤트 가이 메소드에서 처리됩니다.
2. 에이전트 기반 이벤트 처리 모델 (JDK1.1)
이 모델에서는 이벤트 가이 이벤트를 생성하는 구성 요소로 직접 전송됩니다.
각 구성 요소에 대해 리스너라는 하나 이상의 클래스가 등록되며,이 이벤트를 수신하고 처리하는 이벤트 핸들러가 포함되어 있습니다.
리스너는 리스너 인터페이스를 구현하는 클래스입니다. 이벤트는 등록 된 청취자에게만보고 된 개체입니다. 각 이벤트에는 해당 리스너 인터페이스가 있습니다.
마우스로 버튼 객체를 클릭하면 ActionEvent 이벤트가 전송됩니다. 이 ActionEvent 이벤트는 AddActionListener () 메소드를 사용하여 등록 된 모든 ActionListener의 ActionPerformed () 메소드에 의해 수신됩니다.
에이전트 기반 이벤트 처리 모델의 특징 ① 이벤트는 예기치 않게 처리되지 않습니다. 계층 적 모델에서 이벤트는 컨테이너로 전파되어 예기치 않은 수준에서 처리 될 수 있습니다.
② 이벤트 동작을 분류하기 위해 어댑터 클래스를 작성하고 사용하는 것이 가능합니다.
③ 다양한 범주에 작업을 배포하는 데 도움이됩니다.
이 이벤트 처리 모델을 배우는 데 중점을 둡니다
3. 이벤트
이벤트 처리의 세 가지 요소.
(1) 이벤트 소스 이벤트 소스는 버튼, 창 및 텍스트 필드와 같은 이벤트의 생성기입니다.
(2) 이벤트 유형 Java의 모든 이벤트는 클래스에 캡슐화되며 이러한 이벤트 클래스는 Java.awt.event 패키지에 집중됩니다. 모든 이벤트 클래스는 Awtevent 클래스와 메소드 -getSouce () 메소드를 상속합니다. 이는 이벤트가 발생한 객체를 반환합니다.
(3) 이벤트 리스너에서 다른 유형의 이벤트가 발생한 후, 이벤트 리스너는 이벤트를 수신하고 해당 이벤트 처리 방법을 호출합니다. 모든 이벤트 리스너는 실제로 java.awt.event 패키지의 인터페이스이며 Java.util.eventListener 인터페이스를 소개합니다. 이벤트 유형이 다른 리스너마다 다른 방법이 있습니다.
이벤트 처리 단계 ① 프로그램은 java.awt.event 패키지를 추가합니다.
java.awt.event import;
② 필요한 이벤트 소스 개체에 대한 이벤트 리스너 등록 :
이벤트 소스 개체 .addxxxlistener (xxxlistener);
③ 해당 방법을 구현하십시오. 리스너 인터페이스에 여러 메소드가 포함 된 경우 모든 메소드 예제를 구현해야합니다. B2.addactionListener (this)
4. 이벤트 어댑터 (어댑터)
각 리스너 인터페이스의 모든 방법을 구현하는 작업량은 매우 높습니다. 편의를 위해 Java 언어는 어댑터 클래스를 제공하여 여러 방법이 포함 된 클래스를 구현합니다.
정의하는 리스너는 어댑터 클래스를 상속하고 필요한 방법을 무시할 수 있습니다.
예를 들어, Window 이벤트에 해당하는 리스너는 WindowListener입니다. Windowlistener는 WindowOpened (), WindowClosed (), WindowClosing (), WindowDeiconFied (), WindowActivated () 및 WindowDeactivated ()를 포함한 여러 메소드를 구현해야합니다.
WindowAdapter를 상속하는 경우 하나 또는 여러 메소드 만 구현하면 모든 방법을 구현할 필요가 없습니다. 다음 예제 중 다수는 창을 닫을 때 시스템을 종료 할 목적으로 하나의 WindowClosing () 방법 만 구현합니다.
4.1 버튼 이벤트 처리
버튼을 클릭 할 때 발생하는 이벤트는 액션 이벤트입니다. 액션 이벤트에 해당하는 이벤트 클래스는 ActionEvent 클래스입니다. 액션 이벤트에 해당하는 이벤트 리스너는 다음과 같습니다. ActionListener
청취자의 주요 방법 :
ActionPerformed (ActionEvent e) 액션 이벤트가 발생할 때 호출되는 작업 프로젝트 :
첫 번째 단계는 액션 이벤트 리스너 AddActionListener (ActionListener)를 등록하는 것입니다.
두 번째 단계는 ActionListener 인터페이스 메소드를 구현하는 것입니다 : ActionPerformed (ActionEvent e)
4.2 마우스 이벤트 처리
마우스 이벤트를 트리거하는 이벤트 소스는 일반적으로 컨테이너입니다. 마우스가 컨테이너에 들어가거나 나가거나 마우스를 클릭하면 마우스를 끌어 내면 컨테이너에서 마우스 이벤트가 발생합니다. 마우스 이벤트에 해당하는 이벤트 클래스는 Mouseevent 클래스입니다.
Mouseevent 클래스의 방법 :
getx () 마우스의 x 좌표를 가져옵니다
gety ()는 마우스의 Y 좌표를 가져옵니다
getpoint ()는 마우스 위치를 가져오고 마우스 이벤트는 두 이벤트 리스너에 해당합니다. Mouselistener (또는 MouseAdapter)는 마우스 이벤트에 해당하며 MousemotionListener (또는 MousemotionAdapter)는 마우스 이동 이벤트에 해당합니다.
Mouselistener (또는 MouseAdapter)의 주요 방법
마우스 프레스를 다루는 방법 (Mouseevent E)
MouserEleled (Mouseevent E) 마우스 방출을 처리하는 방법
마우스 센터 (Mouseevent e) 입력시 마우스를 다루는 방법
mouseexited (mouseevent e) 떠날 때 마우스를 다루는 방법
Mouseclicked (Mouseevent e) 마우스 클릭을 처리하는 방법
MouseMotionListener (또는 MouseMotionAdapter)의 주요 방법
MouseMoved (Mouseevent e) 움직일 때 마우스를 다루는 방법
마우스 브래지어 (Mouseevent E) 마우스 드래그를 처리하는 방법
4.3 키보드 이벤트 처리
키보드 초점이있는 구성 요소에서 키보드를 누르거나 릴리스 할 때 키보드 이벤트가 발생합니다. 키보드 이벤트에 해당하는 이벤트 클래스는 KeyEvent 클래스입니다.
KeyEvent 클래스 주요 방법 :
getKeyCode ()를 눌러야하거나 릴리스 할 키 코드를 가져옵니다.
getKeyText ()는 눌려 지거나 릴리스 된 키의 문자열을 가져옵니다. 키보드 이벤트에 해당하는 이벤트 리스너는 다음과 같습니다.
주요 방법 :
Keypressed (keyevent e) 키보드를 누를 때 처리하는 방법
KeyReleased (KeyEvent e) 키보드를 출시 할 때 키보드를 처리하는 방법
4.4 창 처리
창과 확장 클래스 (프레임, 대화 상자 등)가있는 경우에만 창이 트리거 될 수 있으며, 창이 활성/유효하지 않은 상태, 아이콘/비 ICON 상태 또는 개방 상태 등에 있음을 나타냅니다.
주요 방법 :
Windowopened (WindowEvent e) 개방 창의 이벤트 처리
windowclosed (windowevent e) 닫는 창의 이벤트 처리
Windowclosing (WindowEvent e) 창의 폐쇄 이벤트 처리
WindowActivated (WindowEvent e) 활성화 상태의 이벤트 처리
Windowdeactivated의 유효하지 않은 상태의 이벤트 처리 (WindowEvent e)
4.5 다른 이벤트 처리
4.5.1 확인란 및 라디오 버튼 이벤트 처리의 이벤트 클래스는 다음과 같습니다.
옵션 이벤트에 해당하는 이벤트 리스너는 다음과 같습니다.
방법:
ItemStateChanged (itemEvent e)는 옵션 이벤트가 발생할 때 호출됩니다.
조정 이벤트에 해당하는 이벤트 리스너는 다음과 같습니다.
방법:
조정 이벤트가 발생할 때 ArdittmentValueChanged (AdjualmentEvent e)가 호출됩니다
4.5.3 드롭 다운 목록의 이벤트 처리 이벤트 클래스는 다음과 같습니다.
옵션 이벤트에 해당하는 이벤트 리스너는 다음과 같습니다.
방법:
itemStateChanged (ItemEvent e)는 드롭 다운 목록에서 조치가 발생할 때 호출됩니다.
(드롭 다운 목록의 이벤트 처리는 이벤트 유형, 이벤트 리스너 및 메소드와 동일하다는 것을 알 수 있습니다. 이벤트 상자의 이벤트 처리, 이벤트 유형, 이벤트 리스너 및 라디오 박스의 이벤트 처리 방법).
4.5.4 메뉴 처리 메뉴 이벤트는 일반적으로 메뉴 항목을 클릭 할 때 발생하는 이벤트입니다.
메뉴 항목에는 두 가지 유형이 있습니다.
menuitem 액션 이벤트
CheckBoxMenuitem, 옵션 이벤트
Menuitem의 이벤트 처리의 첫 번째 단계는 모든 Menuitem 메뉴 항목에 대한 Action Event Listener AddactionListener (ActionListener)를 등록하는 것입니다.
두 번째 단계는 ActionListener 인터페이스의 메소드를 구현하는 것입니다 : ActionPerformed (ActionEvent e). 이 방법에서는 e.getSource ()를 사용하여 사용자가 선택한 메뉴 항목을 얻고 해당 처리를 수행하십시오.
CheckboxMenuitem의 이벤트 처리의 첫 번째 단계는 모든 CheckMenuitem 메뉴 항목에 대한 옵션 이벤트 리스너를 AdditemListener (ItemListener)에 등록하는 것입니다.
두 번째 단계는 ItemListener 인터페이스 방법을 구현하는 것입니다 : ItemStateChanged (itemEvent e). 이 메소드에서는 e.getSource ()를 사용하여 사용자가 선택한 메뉴 항목을 가져 오기 위해, e.getItem ()을 선택하여 사용자가 선택한 메뉴 항목의 레이블을 가져 와서 선택한 지 여부를 얻고 해당 프로세스를 수행하십시오.
2. 예외 처리
좋은 프로그래밍 언어 나 프로그래머는 예외 처리를 무시하지 않습니다. 인기있는 객체 지향 프로그래밍 언어 인 Java 인 예외 처리 메커니즘은 당연히 중요한 기능 중 하나입니다.
일반적으로 예외는 다음과 같이 설명됩니다. 프로그래밍 오류. 그러나 실제로이 오류는 컴파일 오류 및 작동 오류와 같은 많은 종류와 함께 매우 빈번합니다 (특히 시스템 작동 오류 및 논리적 조작 오류로 나뉩니다. 이전에 프로그래밍 오류로 거의 고려되지 않습니다.)
Java에서는 예외는 던질 수있는 클래스에서 물려받는 수업입니다. 각 예외 클래스는 실행 오류를 나타냅니다 (참고 : 실행 오류입니다). 예외 클래스에는 작업 오류에 대한 정보와 오류 처리 방법이 포함되어 있습니다.
자바 예외 처리 메커니즘 :
Java 프로그램 작업 중에 식별 가능한 실행 오류가 발생할 때마다 (즉, 오류에 해당하는 예외 클래스가있는 경우) 시스템은 예외 클래스의 해당 객체를 생성합니다 (참고 : 예외 클래스 개체를 생성하는 것입니다. 즉, 예외가 생성됩니다.
예외 객체가 생성되면 시스템에 충돌, 죽은 루프 또는 운영 체제에 대한 기타 손상이 없도록하여 전체 프로그램의 작동 보안을 보장 할 수 있도록 시스템에 해당 메커니즘이 있어야합니다.
예외 및 예외 클래스 :
오류 : Java Virtual Machine에서 생성 및 던져졌으며 Java 프로그램은 처리하지 않습니다.
런타임 예외 (0, 배열 위트 스크립트와 같은 시스템 오류가 범위를 초과) : 시스템에서 감지하면 사용자의 Java 프로그램을 처리 할 수 없으며 시스템은 기본 예외 핸들러로 전달했습니다 (참고 : 기본 예외 처리가 있습니다).
예외 (프로그램의 문제, 예측 가능) : Java 컴파일러는 Java 프로그램이 사용자가 자신의 예외를 생성하는 모든 런타임이 아닌 예외를 포착하거나 선언해야합니다.
예외 클래스 생성자 :
공개 예외 ();
공개 예외 (문자열 s); 문자열 매개 변수에 의해 전달 된 정보를 허용 할 수 있으며, 이는 일반적으로 예외에 해당하는 오류에 대한 설명입니다.
예외 클래스는 또한 아버지로부터 던질 수있는 여러 가지 방법을 물려받으며, 그중에 일반적으로 사용되는 방법은 다음과 같습니다.
1) 공개 문자열 toString ();
toString () 메소드는 현재 예외 클래스 정보를 설명하는 문자열을 반환합니다.
2) public void printstacktrace ();
PrintStackTrace () 메소드에는 리턴 값이 없습니다. 이 기능은 인쇄 작업을 완료하고 현재 표준 출력 (일반적으로 화면)에서 현재 예외 객체의 스택 사용 트랙을 인쇄하는 것입니다.
시스템 정의 된 작업 예외
이러한 서브 클래스 중 일부는 시스템에 의해 미리 정의되며 Java 클래스 라이브러리에 포함되며 시스템 정의 작업 예외라고합니다.
사용자 정의 예외
특정 응용 프로그램에 고유 한 작업 오류의 경우 프로그래머는 프로그램의 특수 논리에 따라 사용자 정의 예외 클래스 및 예외 객체를 만들어야합니다. 사용자 정의 예외는 일반적으로 예외 클래스의 상위 클래스로 사용됩니다. 그러나 아직 이해되지 않은 문제가 있습니다. 시스템은 오류가 발생하고 인식 할 수 있음을 어떻게 알 수 있습니까? 해당 예외 클래스 객체를 생성하는 방법은 무엇입니까? 해당 방법을 사용하여 예외 클래스 객체를 해결하는 방법을 어떻게 알 수 있습니까? 해당 예외를 처리하는 각 예외 클래스 객체에 하나의 예외 처리 방법 만 있습니까? ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――�
사용자 정의 예외를 만들 때 다음과 같은 작업이 일반적으로 필요합니다.
1) 새로운 예외 클래스를 선언하여 예외 클래스 또는 기타 기존 시스템 예외 클래스 또는 사용자 예외를 부모 클래스로 사용합니다.
2) 새 예외 클래스의 속성 및 메소드를 정의하거나 부모 클래스의 속성 및 메소드를 과부하시켜 이러한 속성 및 메소드가 클래스에 해당하는 오류 정보를 반영 할 수 있도록.
예외가 발생했습니다
Java 프로그램이 실행될 때 식별 가능한 오류가 발생하면 오류에 해당하는 예외 클래스의 객체가 생성됩니다. 이 과정을 예외 던지기라고합니다.
실제로 해당 예외 클래스 객체의 인스턴스를 던지고 있습니다.
예외 클래스에 따라 예외를 던지는 두 가지 방법이 있습니다 : 시스템 자동 던지기 및 사용자 던지기 :
1. 시스템이 자동으로 버릴 것입니다
시스템 정의 된 작업 오류 예외는 시스템에 의해 자동으로 던져집니다.
2. 사용자가 던져
사용자 정의 예외는 시스템에 의해 자동으로 던져 질 수 없지만 Java 문의 사용자가 던져야합니다. Java 진술에서 Throw 문은 명시 적으로 "예외"를 던지는 데 사용됩니다.
return type 메서드 이름 (매개 변수 목록) 형식에서 던질 예외 클래스 이름의 목록을 던질 {{
…
예외 클래스 인스턴스 던지기; // 여기에 참고 ...
}
알아채다:
1) 일반적으로 프로그램에서 특정 조건이 충족 될 때 예외가 발생합니다.
종종 IF 문의 IF 지점에 던지기 진술을 넣고
if (i> 100)
던지기 (new myException ());
2) 던지는 진술을 포함하는 메소드의 경우 다음 부분이 메소드 헤더 정의에 추가되어야합니다.
예외 클래스 이름 목록을 던져 버립니다. 이것은 주로이 방법을 호출하는 상위 방법을 알리고 런타임 중에 던질 수있는 예외를 수락하고 처리 할 준비를하는 것입니다. 이 메소드에 두 개 이상의 던지기 문이있는 경우, 가능한 모든 예외는 메소드 헤더 던지기에 나열되어야합니다.
3) Java Langu 던질 수없는 객체를 던지려고하면 Java 컴파일러가 오류 예외를보고합니다.
주로 예외를 포착하는 방법, 예외를 포착 한 후 점프하는 방법 및 예외 처리 설명을 작성하는 방법을 고려하십시오.
1. 시도해보십시오… 캐치… 마침내 블록
1) 시도하십시오
try 문의 {}에는 하나 이상의 예외를 던질 수있는 프로그램 코드가 포함되어 있습니다. 이 코드는 실제로 캐치 블록이 잡을 수있는 예외 범위를 지정합니다.
Java 프로그램이 Try Block에서 명령문에 실행될 때 예외가 발생하면 더 이상 Try Block에서 다른 문장을 계속 실행하지 않지만 첫 번째 일치 예외 유형을 찾아 처리하기 위해 캐치 블록을 직접 들어갑니다.
2) 캐치 블록
캐치 문의 매개 변수는 예외 유형 및 예외 객체를 포함한 메소드의 정의와 유사합니다.
예외 유형은 Throwable 클래스의 서브 클래스 여야하며, 이는 Catch 문에 의해 처리 된 예외 유형을 지정합니다.
예외 객체는 시도에 의해 지정된 프로그램 코드 블록에서 Java 런타임 시스템에서 던진 곱슬 브레이스에서 예외 객체를 처리하기위한 메소드 코드입니다.
다른 유형의 예외를 별도로 처리하는 여러 가지 캐치 문이있을 수 있습니다.
Java 런타임 시스템은 각 캐치 명령문에 의해 처리 된 예외 유형을 위에서 아래로 감지하여 일치하는 캐치 문을 찾을 때까지 감지합니다.
여기서, 유형 일치는 캐치의 예외 유형이 생성 된 예외 객체의 유형 또는 예외 객체의 상위 클래스와 정확히 동일하다는 것을 의미합니다. 따라서 캐치 문의 정렬 순서는 특별부터 일반에서 일반까지이어야합니다. (왜 그런지 생각해?)
3) 마침내 블록
최종 성명서는 예외 처리 이벤트에 제공되는 정리 메커니즘이라고 할 수 있습니다. 일반적으로 파일을 닫거나 다른 시스템 리소스를 해제하는 데 사용됩니다. Try-Catch-Finally 진술에는 최종적으로 부분이있는 진술이있을 수 있습니다.
마지막으로 부분이 없으면 시도가 지정된 프로그램 코드가 예외를 던지면 다른 프로그램 코드가 실행되지 않습니다.
마지막으로 부분이있는 경우, 시도 블록에서 예외가 발생하든 캐치 부분이 실행되었는지 여부에 관계없이 마지막으로 부품 문을 실행해야합니다.
성명서의 마지막 부분은 예외 처리를위한 통합 출구를 제공한다는 것을 알 수 있습니다.
여러 예외는 여러 가지 다른 예외를 생성 할 수 있으며 이러한 예외를 처리하기 위해 다른 방법을 사용하려면 다중 예외 처리 메커니즘을 사용해야합니다.
시도 블록 후 여러 캐치 블록을 정의하여 다중 예외 처리가 달성됩니다. 각 캐치 블록은 특정 예외 객체를 수신하고 처리하는 데 사용됩니다. 캐치 블록의 매개 변수를 통해 예외 객체 가이 캐치 블록에서 수신 및 처리 된 예외 여부를 결정합니다.
어떤 캐치 블록을 얻습니까? 예외 객체 및 캐치 블록의 예외 매개 변수 일치에 따르면 다음과 같은 세 가지 조건 중 하나를 충족하면 예외 객체와 매개 변수가 일치하는 것으로 간주됩니다.
1) 예외 객체는 매개 변수와 동일한 예외 클래스에 속합니다.
2) 예외 객체는 매개 변수 예외 클래스의 서브 클래스에 속합니다.
3) 예외 객체는 매개 변수로 정의 된 인터페이스를 구현합니다.
첫 번째 캐치 블록에 의해 Try Block에서 생성 된 예외 객체가 수신되면 프로그램의 흐름은이 CATG 문 블록으로 직접 이동합니다. 명세서 블록이 실행되면 현재 방법이 종료됩니다. Try Block 및 기타 캐치 블록에서 실행되지 않은 진술은 무시됩니다. Try Block에서 생성 된 예외 객체가 첫 번째 캐치 블록과 일치하지 않으면 시스템이 자동으로 두 번째 캐치 블록으로 이동하여 일치합니다. 두 번째가 여전히 일치하지 않으면 예외 객체를 수신 할 수있는 캐치 블록이 발견되고 프로세스가 완료 될 때까지 세 번째, 네 번째로 전환됩니다.
첫 번째 캐치 블록에 의해 Try Block에서 생성 된 예외 객체가 수신되면 프로그램의 흐름은이 CATG 문 블록으로 직접 이동합니다. 명세서 블록이 실행되면 현재 방법이 종료됩니다. Try Block 및 기타 캐치 블록에서 실행되지 않은 진술은 무시됩니다. Try Block에서 생성 된 예외 객체가 첫 번째 캐치 블록과 일치하지 않으면 시스템이 자동으로 두 번째 캐치 블록으로 이동하여 일치합니다. 두 번째가 여전히 일치하지 않으면 예외 객체를 수신 할 수있는 캐치 블록이 발견되고 프로세스가 완료 될 때까지 세 번째, 네 번째로 전환됩니다.
Try Block에서 모든 문을 실행하면 예외가 발생하지 않으면 모든 캐치 블록이 무시되고 실행되지 않습니다.
알아채다:
1) 캐치 블록의 진술은 다른 예외에 따라 다른 작업을 수행해야하므로 여러 예외를 다룰 때 각 캐치 블록의 배열 순서를 신중하게 설계하기 위해주의를 기울여야합니다. 일반적으로보다 구체적이고 일반적인 예외를 다루는 캐치 블록은 앞에 배치되어야하며 여러 예외와 일치 할 수있는 캐치 블록은 뒷면에 배치해야합니다.
/*오류 예외 처리를 실행하려면 사용자를 시도해보십시오. 문제는 이것입니다. 입력 된 사용자 급여의 초기 가치가 800보다 미만인 경우 잘못되었습니다. 물론 급여의 변화가 20%를 초과하면 잘못되었습니다*/ import java.awt.*; Java.Applet을 가져옵니다.*; import java.awt.event.*; Public Class aserexceptionApplet은 애플릿 구현을 확장하여 ActionListener {label prompt1 = 새 레이블 ( "직원의 이름과 초기 값을 입력하십시오 :"); LABEL PROMPT2 = 새 레이블 ( "수정할 급여를 입력하십시오"); 텍스트 필드 이름, Isal, Nsal; 문자열 msg; 직원 EMP; 버튼 OKBTN = 새 버튼 ( "OK"); 버튼 cancelbtn = 새 버튼 ( "취소"); public void init () {name = new Textfield (5); ISAL = New Textfield (5); NSAL = New Textfield (5); 추가 (prompt1); 추가 (이름); 추가 (isal); 추가 (prompt2); 추가 (NSAL); 추가 (OKBTN); okbtn.addactionListener (this); CancelBtn.addactionListener (this); 추가 (cancelbtn); } public void Paint (그래픽 g) {G.DrawString (MSG, 0,80); } public void createemp (String empname, double sa) {try {emp = new Employee (empname, sa); msg = new String (emp.tostring ()); } catch (불법 행사 exception is) {msg = new String (ise.toString ()); }} public void ChangeEmpsal (이중 변경) {try {emp.setempsalary (changessal); msg = new String (emp.tostring ()); } catch (불법 불법 사소한 illsal) {msg = new String (illsal.toString ()); } catch (IllegalsAlaryChangeException IllSalChange) {msg = new String (emp.tostring ()+illsalchange.toString ()); }} public void ActionPerformed (ActionEvent e) {String empname; 이중 empsal, 변화; Object obj = e.getSource (); if (obj == okbtn) {empname = new String (name.getText ()); if (empname == null) {msg = new String ( "직원의 이름과 급여를 먼저 입력하여 작성하십시오"); } if (nsal.getText () == null) {empsal = double.valueof (isal.getText ()). doubleValue (); createemp (empname, empsal); } else {changessal = double.valueof (nsal.getText ()). doubleValue (); changeempsal (변화); }} if (obj == cancelbtn) {naem.settext ( ""); isal.settext ( ""); nsal.settext ( ""); } Repaint (); }} 클래스 직원 {문자열 m_empname; 이중 m_empsalary; Employee (문자열 이름, 이중 초기)는 불법 불법 {m_empname = name; // 여기에 문제가 있는지 확인합니다. 참조 코드는 m_empname = new String (name)입니다. if (initsalary <800) {Throw (새로운 불법 불법 행사 (this, initsalary)); // strow 문} m_empsalary = initsalary; } public String getEmpname () {return m_empname; } public double getempsalary () {return m_empsalary; } public boolean setempsalary (Double Newsal)는 불법적 인 exception, 불법 <800) 던지기 (If (Newsal <800) 던지기 (새로운 불법 불법 행사 (이, 뉴스)); else if (getempsalary () == 0.0) {m_empsalary = newsal; 진실을 반환하십시오. } else if (math.abs (newsal-getempsalary ())/getempsalary ()> = 0.2) Throw (새로운 불법 불법 체인지 exception (this, newsal-getempsalary ())); else {m_empsalary = newsal; 진실을 반환하십시오. }} public String toString () {문자열 s; s = "이름 :"+m_empname+"급여 :"+m_empsalary; 반환 s; }} 클래스 불법 행사 exception 확장 예외 {private Employee m_concernedemp; 개인 Double M_illegalsalary; 불법 행사 (직원 EMP, Double Isal) {Super ( "임금은 최저 임금보다 낮습니다"); m_concernedemp = emp; m_illegalsalary = isal; } public String toString () {문자열 s; S = "직원에게 제공되는 임금은 불법입니다. 직원 :"+M_CONCERNEDEMP.GETEMPNAME ()+"불법 급여 :"+M_ELEGALSALARY+"최저 임금 금액보다 낮은 RMB 800"; 반환 s; }} 클래스 불법 행사 체인지 렉스 컨셉은 예외 {개인 직원 m_concernedemp; 개인 Double M_LEGALSALARYCHANGE; 불법 행위 체인지 렉스 (Employee EMP, Double CSAL) {Super ( "급여 변경은 너무 큽니다"); m_concernedemp = emp; m_illegalsalarychange = csal; } public String toString () {문자열 s; S = "직원에게 제공되는 임금 변경은 불법입니다. 반환 s; }}