문서의 제목 나눔고딕B, 54pt

Similar documents
Microsoft PowerPoint - 04-UDP Programming.ppt

슬라이드 1

02 C h a p t e r Java

Chap12

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과

Eclipse 와 Firefox 를이용한 Javascript 개발 발표자 : 문경대 11 년 10 월 26 일수요일

PowerPoint 프레젠테이션

rmi_박준용_final.PDF

슬라이드 1

Microsoft PowerPoint - Supplement-03-TCP Programming.ppt [호환 모드]

Microsoft PowerPoint - 03-TCP Programming.ppt

iii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다.

슬라이드 1

슬라이드 1

PowerPoint 프레젠테이션

4S 1차년도 평가 발표자료

Interstage5 SOAP서비스 설정 가이드

Microsoft PowerPoint Android-SDK설치.HelloAndroid(1.0h).pptx

자바-11장N'1-502

슬라이드 1

12-file.key

교육2 ? 그림

1. 도구개요 Implementation Eclipse CDT 소개 CDT(C/C++ Development Toolkit) 는 Eclipse plug-in 중하나로 C/C++ 개발을위한통합개발환경 (IDE : Integrated Development Environmen

01-OOPConcepts(2).PDF

슬라이드 1

신림프로그래머_클린코드.key

PowerPoint 프레젠테이션

C# Programming Guide - Types

슬라이드 1

1

Microsoft PowerPoint SDK설치.HelloAndroid(1.5h).pptx

JMF3_심빈구.PDF

<4D F736F F F696E74202D20C1A63234C0E520C0D4C3E2B7C228B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

슬라이드 1

비긴쿡-자바 00앞부속

Cluster management software

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

슬라이드 1

Analytics > Log & Crash Search > Unity ios SDK [Deprecated] Log & Crash Unity ios SDK. TOAST SDK. Log & Crash Unity SDK Log & Crash Search. Log & Cras

JUNIT 실습및발표

자바GUI실전프로그래밍2_장대원.PDF

1. 도구개요 CppUnit Testing 소개 CppUnit 는 C++ 용 testing Framework 로 Java 의 JUnit 을 C++ 로구현 C++ 언어에서사용할수있도록개발된 Open Source 프로젝트로, source code 의특정 Module 이의도

API - Notification 메크로를통하여어느특정상황이되었을때 SolidWorks 및보낸경로를통하여알림메시지를보낼수있습니다. 이번기술자료에서는메크로에서이벤트처리기를통하여진행할예정이며, 메크로에서작업을수행하는데유용할것입니다. 알림이벤트핸들러는응용프로그램구현하는데있어

제11장 프로세스와 쓰레드

[ 그림 8-1] XML 을이용한옵션메뉴설정방법 <menu> <item 항목ID" android:title=" 항목제목 "/> </menu> public boolean oncreateoptionsmenu(menu menu) { getme

SQL Developer Connect to TimesTen 유니원아이앤씨 DB 기술지원팀 2010 년 07 월 28 일 문서정보 프로젝트명 SQL Developer Connect to TimesTen 서브시스템명 버전 1.0 문서명 작성일 작성자

Network Programming

JAVA 플랫폼 개발 환경 구축 및 활용

Install stm32cubemx and st-link utility

슬라이드 1

Spring Boot/JDBC JdbcTemplate/CRUD 예제

Microsoft PowerPoint - CSharp-10-예외처리

JAVA PROGRAMMING 실습 08.다형성

PowerPoint 프레젠테이션

05-class.key

Microsoft PowerPoint - RMI.ppt

09-interface.key

API STORE 키발급및 API 사용가이드 Document Information 문서명 : API STORE 언어별 Client 사용가이드작성자 : 작성일 : 업무영역 : 버전 : 1 st Draft. 서브시스템 : 문서번호 : 단계 : Docum

C. KHU-EE xmega Board 에서는 Button 을 2 개만사용하기때문에 GPIO_PUSH_BUTTON_2 과 GPIO_PUSH_BUTTON_3 define 을 Comment 처리 한다. D. AT45DBX 도사용하지않기때문에 Comment 처리한다. E.

슬라이드 1

Design Issues

슬라이드 1

슬라이드 1

B.3 JDBC 설치 JDBC Java DataBase Connectivity 는자바에서 DBMS의종류에상관없이일관된방법으로 SQL을수행할수있도록해주는자바 API Application Program Interface 다. 이책에서는톰캣과 SQL Server 간의연결을위

gnu-lee-oop-kor-lec10-1-chap10

Data Sync Manager(DSM) Example Guide Data Sync Manager (DSM) Example Guide DSM Copyright 2003 Ari System, Inc. All Rights reserved. Data Sync Manager

Windows 8에서 BioStar 1 설치하기

슬라이드 1

ISP and CodeVisionAVR C Compiler.hwp

PowerPoint Presentation

5장.key

<4D F736F F D D31312D30312D53572D30312DBBE7BFEBC0DABCB3B8EDBCAD5FBFDCBACEB9E8C6F7BFEB2E646F63>

블로그_별책부록

untitled

예제 2) Test.java class A intvar= 10; void method() class B extends A intvar= 20; 1"); void method() 2"); void method1() public class Test 3"); args) A

PowerPoint 프레젠테이션

슬라이드 1

초보자를 위한 C++

을풀면된다. 2. JDK 설치 JDK 는 Sun Developer Network 의 Java( 혹은 에서 Download > JavaSE 에서 JDK 6 Update xx 를선택하면설치파일을

<4D F736F F F696E74202D20C1A63235C0E520B3D7C6AEBFF6C5A920C7C1B7CEB1D7B7A1B9D628B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

PowerPoint Template

Spring Boot

서현수

MPLAB C18 C

<C0CCBCBCBFB52DC1A4B4EBBFF82DBCAEBBE7B3EDB9AE2D D382E687770>

슬라이드 1

오버라이딩 (Overriding)

DE1-SoC Board

Microsoft Word - src.doc

Orcad Capture 9.x

JAVA PROGRAMMING 실습 09. 예외처리

제8장 자바 GUI 프로그래밍 II

파워포인트

슬라이드 1

Microsoft PowerPoint - chap-02.pptx

NTD36HD Manual

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx

Splentec V-WORM Quick Installation Guide Version: 1.0 Contact Information 올리브텍 주소 : 경기도성남시분당구구미로 11 ( 포인트타운 701호 ) URL: E-M

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

Transcription:

Eclipse JDT 1. 도구개요 2. 설치및실행 3. 주요기능 4. 활용예제

1. 도구개요 1.1 도구정보요약 도구명 Eclipse JDT (http://www.eclipse.org/) 라이선스 Eclipse Public License v1.0 소개 JDT(Java Development Toolkit) 는 Eclipse 의가장기본적인 plug-in 으로 JAVA 를개발하기위한통합개발환경 (IDE : Integrated Development Environment) 특징 하나의도구안에서 JAVA Code 를작성하고, 이에대한 debugging 기능을제공하여사용자가쉽고빠르게 SW 개발을할수있는통합개발환경 (IDE : Integrated Development Environment) 주요기능 Code Edit / Compile / Build Unit Test, Debug 실행환경 Windows, Linux, MacOS 사전설치도구 JDK 1.7+ 카테고리 구현최신버전 v4.4.1 (2014.11) 관련도구 Net Beans, DrJava, jedit 2

1. 도구개요 1.2 스크린캡쳐및주요기능 Souce Code 편집, Code Assist 등의편집기능 Call Hierarchy, 의존성검사등소스분석과빌드기능 Breakpoint 를통한 Step over, Step into, 변수값확인등디버그기능 3

2. 설치및실행 세부목차 2.1 JDK 다운받기 2.2 Eclipse JDT 다운받기 2.3 Eclipse JDT 실행하기 4

2. 설치및실행 2.1 JDK 다운받기 다음의사이트에서 JDK를다운 http://www.oracle.com/technetwork/java/javase/downloads/index.html Download JDK를클릭하여다운받고설치 5

2. 설치및실행 2.2 Eclipse(JDT) 다운받기 (1/2) 다음의사이트에서 Eclipse를다운로드받음 http://www.eclipse.org/downloads/ Eclipse는실행될 OS에따라다른버전을제공 6

2. 설치및실행 2.2 Eclipse(JDT) 다운받기 (2/2) Mirror 사이트를선택한후파일을다운 7

2. 설치및실행 2.3 Eclipse(JDT) 실행하기 (1/4) 다운받은파일의압축을풀고 eclipse.exe 파일을실행 8

2. 설치및실행 2.3 Eclipse(JDT) 실행하기 (2/4) 생성된프로젝트들이저장될 workspace 를지정 ❶ 을체크하면다음실행시에 workspace 의위치를묻지않음 원하는 workspace 를선택하고확인을눌러 Eclipse 를실행 ❶ ❷ ❸ 9

2. 설치및실행 2.3 Eclipse(JDT) 실행하기 (3/4) Eclipse(JDT) 실행 ❶ 을클릭하면기본화면으로진입 화면의각아이콘을선택하면해당모드로진입 ❶ 10

2. 설치및실행 2.3 Eclipse(JDT) 실행하기 (4/4) JDT 환경에서 Eclipse 를실행한첫화면 11

세부목차 3.1 주요기능소개 3.2 프로젝트관리및실행 3.3 JDT view의구성과기능 3.4 JDT Editor 기능 3.5 Import 3.6 Export 3.7 JDT 단축키 3.8 설정최적화 3.9 디버깅팁 12

3.1 주요기능소개 강력한 Source code editor 를제공 자동완성기능, Refactoring 및 Code browsing 등을제공 작성한프로그램을실행시 Configuration 을통해실행환경을설정 Arguments, JRE 선택등사용자의선택이가능 Breakpoint 를이용한 Debug 가가능 Debug 과정중에는모든변수들의상태를알려주는 View 들의이용가능 프로그램이진행되는전상태및이후상태를자유롭게이동하면서상태를살필수있음 프로그램전체구조를살펴보며개발에필요한 View 들을제공 Package Explorer View Hierarchy View Outline View Call Hierarchy View Problems View JavaDoc View Declaration View 13

3.2 프로젝트관리및실행 (1/11) JAVA 프로젝트생성 상단의 File Menu 를통해 Java Project 를선택 14

3.2 프로젝트관리및실행 (2/11) JAVA 프로젝트생성 ❶원하는프로젝트이름 ❷해당프로젝트가실행된 JAVA 의버전 ❸ 프로젝트의기본구조를선택 ❶ 선택된구조로폴더및 class 파일생성 ❹ 해당프로젝트를 working set 에추가여부선택 ❷ ❺Next 를선택하여다음화면으로넘어감 ❸ ❹ ❺ 15

3.2 프로젝트관리및실행 (3/11) JAVA 프로젝트생성 이전화면에서선택된결과를보여주고프로젝트에추가될 Library등을설정 ❶ 현재선택되어만들어진프로젝트의 Directory 구조 하단의링크를선택하여폴더, 소스등의추가가능 ❶ ❷ 결과물인 Class 파일들이생성될위치를지정 ❸Finish 를선택하여프로젝트생성을마침 ❷ ❸ 16

3.2 프로젝트관리및실행 (4/11) Package의생성 JAVA 는 Class 들을 package 로관리, ❶ 클릭 ❷ 패키지이름설정 ❸ 을눌러완료 ❶ ❷ ❸ 17

3.2 프로젝트관리및실행 (5/11) Class 의생성 생성할패키지우클릭 New Class 18

3.2 프로젝트관리및실행 (6/11) Class 의생성 Class 생성시상속받을 Class 와구현할 Interface 선택가능, 접근제어선택가능 19

3.2 프로젝트관리및실행 (7/11) Interface 의생성 20

3.2 프로젝트관리및실행 (8/11) Interface 의생성 Interface 생성시이름설정, 접근제어선택가능 21

3.2 프로젝트관리및실행 (9/11) 프로젝트실행 본화면에서는, 실행환경설정이되어있지않아 Run Configuration 만존재 22

3.2 프로젝트관리및실행 (10/11) 프로젝트실행 실행할환경을선택 New 23

3.2 프로젝트관리및실행 (11/11) 프로젝트실행 JDT 는 UI 프로젝트일때는해당모듈을사용하며, Text 프로젝트는그림과같이 Console 출력함 24

3.3 JDT View 의구성과기능 (1/6) Package Explorer view : 프로젝트와프로젝트에속한각종요소 (Package, Class ) 표시 파일의생성, 삭제또는프로그램실행에대한조작가능 25

3.3 JDT View 의구성과기능 (2/6) Outline view : 현재 Editor 에열려있는소스파일의구조를보여줍니다. Class, 멤버변수, method 등 26

3.3 JDT View 의구성과기능 (3/6) Call Hierarchy view : 해당 method 또는변수가사용되는모든곳을 Tree 구조로보임 해당 method 를클릭하여실행하면아래의그림처럼나타남 27

3.3 JDT View 의구성과기능 (4/6) Problems view : 개발중에발생되는에러나경고를표시 표시된문제점을더블클릭하면해당문제점이있는파일의위치로이동 28

3.3 JDT View 의구성과기능 (5/6) JavaDoc view : 선택한부분에대한 javadoc 주석이있는경우그것을보임 Package Explore, Outline view, Editor 등. 별도의설치가필요한경우도있음 29

3.3 JDT View 의구성과기능 (6/6) Declaration view : 선언된형태를보여주는 View Editor 에서선택된부분이어떻게선언되어있는지보임 30

3.4 JDT Editor 의기능 (1/12) Editor 의종류는프로젝트 type 에따라여러가지가있을수있다 GEF module 사용프로젝트에서는 GEF Editor 를사용, JAVA 에서는 JAVA Editor 를사용 31

3.4 JDT Editor 의기능 (2/12) Marker Bar : Compile 에러, 경고, Book mark, Task, over ride 된 method, Code block 표시 현재선택된 Code block 은 Marker Bar 상에서진하게표시 Compile 에러나경고는 Marker Bar 에표시될뿐아니라 Editor 에도표시 : Compile 에러 : 빨간색밑줄 / 경고 : 노란색밑줄 Marker Bar 우측 : Code 를펼치고접을수있는아이콘존재 -, + 모양의아이콘을클릭하여해당 Code block 을접거나펼칠수있음 32

3.4 JDT Editor의기능 (3/12) Overview Ruler : Compile에러, 경고, Book mark, Task등의위치를표시 빨간색 : compile에러 노란색 : 경고 초록색 : Book mark 파란색 : Task 하얀색 : 현재선택한변수, method등이사용되는곳 33

3.4 JDT Editor 의기능 (4/12) Code Assist : 코드완성 Editor 에서 Java Code 를입력중, Ctrl+Space 를입력하면현재 context 에서입력하던내용을완성하는데필요한 Code(method, Code template 등 ) 이팝업에표시, 선택시코드완성 34

3.4 JDT Editor 의기능 (5/12) Template 관리 새로운 template 을정의하거나기존의 template 을편집, 제거 35

3.4 JDT Editor 의기능 (6/12) 에러조언및수정 Code 에에러가있는경우 Editor 에서해당에러부분에빨간색밑줄이표시 Editor 의왼쪽에있는 Marker Bar 에도에러를나타내는아이콘이표시 Marker Bar 에표시된에러아이콘중에빨간색 x 표옆에전구모양의아이콘은해당에러를수정하기위해빠른수정기능을사용할수있음 빠른수정은에러가발생한부분에커서를놓은다음 ctrl+1 키를누르면해당에러를제거할수있는방법을몇가지제안하고, 사용자는그중원하는것을선택 36

3.4 JDT Editor의기능 (7/12) Quick Type Hierarchy view : Ctrl+T Type를선택한경우해당type에대한상속구조가표시 Method를선택한경우 method를구현한 type의상속구조가표시 팝업 View가표시된상태에서 Ctrl+T를누르면 super type / sub type구조가 toggle 37

3.4 JDT Editor의기능 (8/12) Quick Outline view : Ctrl+O Outline view와같지만, 소스Code를편집하는도중에빠르게호출 팝업위쪽에필터링가능 38

3.4 JDT Editor 의기능 (9/12) Code 자동생성 : Source 항목 Override/Implement Methods : super type 에정의된 method 를 override 하거나구현할필요가있을때이에대한 method stub 를생성 Generate Getters and Setters : 변수에대한 get/set method 를자동으로생성 Add Constructor form Superclass : Class 를만들때 super Class 에있는생성자를그대로생성 Generate Constructor using Fields : Class 가포함하는변수를이용하여생성자를생성 Add Comment : Class 나 method, 변수에대한 JavaDoc 을생성 39

3.4 JDT Editor 의기능 (10/12) Local history 파일을수정하고저장시, 수정전의상태와비교하거나예전상태로복구 40

3.4 JDT Editor 의기능 (11/12) Local history : 상태비교및예전상태로복구 파일을수정하고저장시, 수정전의상태와비교하거나예전상태로복구 41

3.4 JDT Editor 의기능 (12/12) Refactoring : 변수, 메소드등의이름을한번에변경, 이동등의편집 Rename 선택시아래의그림과같이동시에이름을변경 42

3.5 Import (1/5) Eclipse JDT 에서사용할수있는단축키목록입니다. 다른곳에서작업된프로젝트를현재개발자의 workspace 로가져올수있는기능 43

3.5 Import (2/5) Import 프로젝트선택 알수없는프로젝트라면 General 의 Existing Projects into Workspace 를선택 44

3.5 Import (3/5) Import 할프로젝트가있는위치를선택 이전에만든 JDTTest 를 Import 45

3.5 Import (4/5) Import 한폴더와프로젝트를확인 ❶ 프로젝트리스트를선택가능, ❷ 복사할것인지선택, ❸ 프로젝트셋에추가여부설정 ❶ ❷ ❸ 46

3.5 Import (5/5) Import 가완료된모습 기존에프로젝트가그대로로딩된것을확인할수있음 47

3.6 Export (1/3) Export : 프로젝트 Type 에따라선택가능 Jar File, JAVAdoc, Runnable JAR File, File System 48

3.6 Export (2/3) Export : File System ❶Export 할프로젝트선택 ❷ 프로젝트구성파일선택 ❸ 클릭 ❹ 저장위치선정 ❺ ❻ ❶ ❷ ❹ ❸ ❺ ❻ 49

3.6 Export (3/3) Export 하기 : 결과 해당폴더에프로젝트가 Export 된것을확인 50

3.7 JDT 단축키 (1/2) Eclipse JDT 에서사용할수있는단축키목록입니다. 단축키설명 Ctrl + Space Ctrl + Shift + Space Context assist Parameter 힌트표시 Ctrl + 1 Quickfix ( 빠르게에러, 경고수정하는데유용 ) Ctrl + O Quick Outline (Class 구성표시, Editor 상에서각요소로빠르게이동할때유용 ) Ctrl + T F3 Ct기 Ctrl + D Quick Type Hierarchy ( 해당 type 에대한상속구조표시 ) 누를때마다 super / sub type 상속구조가 toggle Open Declaration(method, field 정의를찾아 highlighting 함 ) - 원래위치복귀 ( Alt + <-) / 다시보기 ( Alt + -> ) 자바요소 (method. Field 등 ) 위에마우스놓고 Ctrl 을누르면 hyperlink 생성, 누르면해당요소로이동 (Alt + 화살표키로이동가능 ) 현재커서가위치한행삭제 Ctrl + / // 주석처리 (toggle : 한번더누르면주석해제 ) 51

3.7 JDT 단축키 (2/2) Eclipse JDT 에서사용할수있는단축키목록입니다. 단축키설명 Ctrl + Shift + / /* */ 주석처리 <=> Ctrl + Shift + \: 주석해제 Ctrl + F11 최근설정으로실행 F11 Debug 모드실행 Ctrl + L 특정행이동 Ctrl + F6 Editor 간전환 (F12 : Editor 포커스 ) Ctrl + M 창최대화 (toggle : 한번더누르면원래크기로복귀 ) Ctrl + F7 View 간전환 Ctrl + F8 Perspective 간전환 52

3.8 설정최적화 (1/6) Eclipse 에디터화면에서원하는폰트를사용하려면, 아래과같이 Windows>Preferences 창에서 Colors and Fonts의 Basic > Text Editor Blocks Selection Font > Text Font 를누르고우측의 Edit을클릭하여원하는폰트와크기를지정한다. 53

3.8 설정최적화 (2/6) 불필요한맞춤법검사를비활성화하면구동성능을높일수있다. 54

3.8 설정최적화 (3/6) 불필요한플러그인자동실행을비활성화하여구동속도를높일수있다. 55

3.8 설정최적화 (4/6) General>Workspace>Text file encoding 에서인코딩을 UTF-8 로하여한글문제발생을방지할수있다. 56

3.8 설정최적화 (5/6) Java>Editor>Content Assist Auto Activation 에서인코딩을코드완성자동활성화를해제해서성능을높일수있다. 57

3.8 설정최적화 (6/6) Java>Editor>Folding 에서자동접기를해제하면성능을높일수있다. 58

3.9 디버깅팁 (1/4) 조건부 Breakpoint 를지정해서특정조건에서만 Breakpoint 가동작하게할수있다. 59

3.9 디버깅팁 (2/4) 반복 Breakpoint 를지정해서특정반복회수에도달할때만 Breakpoint 가동작하게할수있다. 60

3.9 디버깅팁 (3/4) 예외 Breakpoint 를지정해서특정예외가발생할때만 Breakpoint 가동작하게할수있다. 61

3.9 디버깅팁 (4/4) Java>Debug>Step Filtering 에서지정한외부라이브러리나자바 Core 클래스에대해서는 Step Into 로해도그내부로들어가지않아디버깅에편리 62

4. 활용예제 세부목차 4.1 예제소개 4.2 채팅프로그램구현하기 4.3 채팅프로그램실행하기 63

4. 활용예제 4.1 예제소개 예제시스템 : 채팅프로그램 채팅프로그램 ( 일부 ) 소켓통신으로채팅프로그램을구현 Server 는 cmd 창에서실행하여작동되며, Client 는 Eclipse UI환경에서구현하나의 Server 에둘이상의클라이언트가접속하여기초적인채팅을할수있어야함 생산관리시스템의구현환경 운영체제환경» 사용자는 PC 기반의 Windows 7 을운영체제로사용 네트워크환경» 사용자와 Web Server 간의통신은소켓통신방식 64

4. 활용예제 4.2 채팅프로그램구현하기 (1/9) 프로젝트의생성 생성할프로젝트의이름을적고 Finish 65

4. 활용예제 4.2 채팅프로그램구현하기 (2/9) Package 생성 test.chat 패키지생성 66

4. 활용예제 4.2 채팅프로그램구현하기 (3/9) ChatHandler 생성 Thread 를상속받는다 67

4. 활용예제 4.2 채팅프로그램구현하기 (4/9) ChatHandler 의코드작성 채팅핸들러코드를구현 package test.chat; import java.net.*; import java.io.*; import java.util.*; public class ChatHandler extends Thread { protected Socket s; protected DataInputStream i; protected DataOutputStream o; private static int cnt = 1; public ChatHandler(Socket s) throws IOException{ this.s= s; i= new DataInputStream(new BufferedInputStream(s.getInputStream())); o = new DataOutputStream(new BufferedOutputStream(s.getOutputStream())); } protected static Vector handlers = new Vector (); public void run () { String name = s.getinetaddress().tostring() + " ["+ cnt++ + "]"; try { broadcast (name + " has joined."); handlers.addelement(this); while (true) { String msg= i.readutf(); } broadcast (name + " -" + msg); } } catch (IOException ex) { ex.printstacktrace(); } finally { handlers.removeelement(this); broadcast (name + " has left."); try { s.close(); } catch (IOException ex) { ex.printstacktrace(); } } protected static void broadcast (String message) { synchronized (handlers) { Enumeration e = handlers.elements(); while (e.hasmoreelements()) { ChatHandler c = (ChatHandler) e.nextelement(); try { synchronized (c.o) { c.o.writeutf(message); } c.o.flush(); } catch (IOException ex) { c.stop(); } } } } } 68

4. 활용예제 4.2 채팅프로그램구현하기 (5/9) ChatServer 이전에생성한 ChatHandler 를실질적으로사용하여 Server 역할을수행 69

4. 활용예제 4.2 채팅프로그램구현하기 (6/9) ChatServer 이전에생성한 ChatHandler 를실질적으로사용하여 Server 역할을수행 package test.chat; import java.net.*; import java.io.*; import java.util.*; public class ChatHandler extends Thread { protected Socket s; protected DataInputStream i; protected DataOutputStream o; private static int cnt = 1; public ChatHandler(Socket s) throws IOException{ this.s= s; i= new DataInputStream(new BufferedInputStream(s.getInputStream())); o = new DataOutputStream(new BufferedOutputStream(s.getOutputStream())); } protected static Vector handlers = new Vector (); public void run () { String name = s.getinetaddress().tostring() + " ["+ cnt++ + "]"; try { broadcast (name + " has joined."); handlers.addelement(this); while (true) { String msg= i.readutf(); 70

4. 활용예제 4.2 채팅프로그램구현하기 (7/9) ChatClient 생성 Frame 을상속받고, Runnable 인터페이스를사용 71

4. 활용예제 4.2 채팅프로그램구현하기 (8/9) ChatClient 의코드작성 채팅핸들러코드를구현 package test.chat; import java.net.*; import java.io.*; import java.awt.*; public class ChatClient extends Frame implements Runnable{ protected DataInputStream i; protected DataOutputStream o; protected TextArea output; protected TextField input; protected Thread listener; public ChatClient(String title, InputStream i, OutputStream o) { super (title); this.i= new DataInputStream(new BufferedInputStream(i)); this.o= new DataOutputStream(new BufferedOutputStream(o)); setlayout(new BorderLayout()); add ("Center", output = new TextArea()); output.seteditable(false); add ("South", input = new TextField()); pack (); show (); input.requestfocus(); listener = new Thread (this); listener.start(); } public void run () { try { } while (true) { String line = i.readutf(); output.appendtext(line + "\n"); } } catch (IOException ex) { ex.printstacktrace(); } finally { listener = null; input.hide(); validate (); try { o.close(); } catch (IOException ex) { ex.printstacktrace(); } } public boolean handleevent(event e) { if ((e.target== input) && (e.id == Event.ACTION_EVENT)) { try { o.writeutf((string) e.arg); o.flush(); } catch (IOException ex) { ex.printstacktrace(); listener.stop(); } input.settext(""); return true; } else if ((e.target== this) && (e.id == Event.WINDOW_DESTROY)) { 72

4. 활용예제 4.2 채팅프로그램구현하기 (9/9) ChatClient 의코드작성 채팅핸들러코드를구현 if (listener!= null) listener.stop(); hide (); return true; } return super.handleevent(e); } public static void main (String args[]) throws IOException{ String host = null; String port = null; if (args.length!= 2) { host = "127.0.0.1"; port = "9830"; } else { host = args[0]; port = args[1]; } Socket s = new Socket (host, Integer.parseInt(port)); new ChatClient("Chat " + host + ":" + port, s.getinputstream(),s.getoutputstream()); } } 73

4. 활용예제 4.3 채팅프로그램실행하기 (1/2) 예제실행하기 : 서버의실행 Cmd 창에서 Server 실행 : 해당프로젝트의 bin 폴더로이동하여 ChatServer 를실행 74

4. 활용예제 4.3 채팅프로그램실행하기 (2/2) 예제실행하기 : Client 의실행 실행결과모습 75