JAVA Programming Languagewebdav.gnunix.co.kr/Lecture/정보과학대학원 JAVA... ·...
Transcript of JAVA Programming Languagewebdav.gnunix.co.kr/Lecture/정보과학대학원 JAVA... ·...
JAVA Programming Language
JAVA ProgrammingLanguage
JAVA Applet
©200
0 H
yun
Hoo
n Ch
o
2JAVA Programming Language
내용? Java Applet
? 개요? 자바 애플릿의 실행? >APPLET<태그와>PARAM<태그? 애플릿에서 이미지와 사운드 출력? 애니메이션 애플릿 작성? 애플릿과 브라우저간의 통신
? 같은 HTML 페이지 내에 포함된 애플릿간 통신
? 브라우저 알아내기 및 기본 브라우저 실행? 실제 스크린 사이즈를 고려한 애플릿 작성? 애플릿과 JAR 파일
©200
0 H
yun
Hoo
n Ch
o
3JAVA Programming Language
개요? JAVA APPLET
? HTML페이지에 포함되어 자바 호환 웹 브라우저에 의해 실행될 수 있는 자바 프로그램
? 웹 서버쪽에 있는 자바 에플릿 코드를 다운로드 한 후 브라우저 내의 특정 영역에서 실행
? HTML 페이지 내에 <APPLET>태그 이용? 자바 애플릿은 main( ) 메소드가 없다.? 애플릿 클래스는 항상 public으로 선언? Applet 클래스로부터 상속
©200
0 H
yun
Hoo
n Ch
o
4JAVA Programming Language
개요? 간단한 자바 애플릿(HelloWorld.html)
<HTML><HEAD><!-- Generated by Kawa IDE --><TITLE>Applet title</TITLE></HEAD><BODY><H1>First Heading</H1><HR><APPLET CODE=HelloWorld WIDTH=220 HEIGHT=150></APPLET><HR></BODY></HTML>
©200
0 H
yun
Hoo
n Ch
o
5JAVA Programming Language
개요? 간단한 자바 애플릿(HelloWorld.java)
import java.awt.Graphics;import java.applet.Applet;public class HelloWorldextends Applet {
public void paint(Graphics g) {g.drawString ("HelloWorld !!", 70, 30);
}}
C:\>javac HelloWorld.javaC:\>appletviewer HelloWorld.html
C:\>
©200
0 H
yun
Hoo
n Ch
o
6JAVA Programming Language
개요? 자바 애플릿 클래스 계층도
©200
0 H
yun
Hoo
n Ch
o
7JAVA Programming Language
자바 애플릿의 실행(1)? 기본적인 메소드
? public void init( );? 애플릿의 초기화 메소드
? public void start( );? 애플릿의 시작 또는 재시작 메소드
? public void stop( );? 애플릿의 정지 메소드
? public void destory( );? 현재 에플릿을 수행 중인 웹브라우저를 닫을 때 호
출되는 메소드
? public void paint(Graphics g);? 현재 애플릿의 영역에 그리기 작업하는 메소드
©200
0 H
yun
Hoo
n Ch
o
8JAVA Programming Language
자바 애플릿의 실행(1)? 기본적인 메소드 호출 순서
©200
0 H
yun
Hoo
n Ch
o
9JAVA Programming Language
자바 애플릿의 실행(2)? 기본 메소드의 사용 예제(AppletMethodTest.html)
<HTML><HEAD><!-- Generated by Kawa IDE --><TITLE>Applet title</TITLE></HEAD><BODY><H1>First Heading</H1><HR><APPLET CODE=AppletMethodTest WIDTH=150 HEIGHT=150></APPLET><HR></BODY></HTML>
©200
0 H
yun
Hoo
n Ch
o
10JAVA Programming Language
자바 애플릿의 실행(3)? 기본 메소드의 사용 예제(AppletMethodTest.java)
import java.awt.*;import java.applet.Applet;
publicclass AppletMethodTest extends Applet {TextArea ta;int count;
public AppletMethodTest() {ta = new TextArea(4, 20);add( ta);count=0;
}public void init() {
ta.append("init"+(count)+"\n");System.out.println("init"+(count++));
}public void start() {
ta.append("start"+(count)+"\n");System.out.println("start"+(count++));
}
publicvoid stop() {ta.append("stop"+(count)+"\n");System.out.println("stop"+(count++));
}public void destroy() {
ta.append("destroy"+(count)+"\n");System.out.println("destroy"+(count++));
}public void paint(Graphics g) {
ta.append("paint"+(count)+"\n");System.out.println("paint"+(count++));
// Display the stringg.drawString("Hello World!", 8, 32); }
}
©200
0 H
yun
Hoo
n Ch
o
11JAVA Programming Language
자바 애플릿의 실행(4)? 자바 애플릿을 웹 홈페이지에 등록하기
? HTML에서 APPLET 태그와 PARAM태그 사용
? 속성(Attribute)code - 컴파일된 자바 애플릿 클래스가 저장된 파일 이름
codebase - 자바 클래스 파일들이 존재하는 디렉토리이름 codebase는HTML 파일과 자바 클래스 파일이 다른 디렉토리에 저장되어있는 경우에
사용archive - 자바의 .class 파일들을 zip이나 jar 파일로 묶어서 파일의 다운로드
시간을 줄이기 위해 사용 Netscape 3.0 이상에서 지원
align -애플릿 정렬 위치를 결정하는데사용
name - 애플릿의 이름을 지정
애플릿 이름은 한 웹 페이지에서여러 개의 애플릿이 있을 때
애플릿 간에 통신하는데 사용
vspace - 애플릿 주위에서 세로 방향 마진 (단위: 픽셀)hspace - 애플릿 주위에서 가로 방향 마진 (단위: 픽셀 )width - 애플릿의 가로 방향 크기 (단위: 픽셀 )height - 애플릿의 세로 방향 크기 (단위 : 픽셀)
©200
0 H
yun
Hoo
n Ch
o
12JAVA Programming Language
자바 애플릿의 실행(4)? Graphics 클래스의 drawXXX( ) 메소드
? drawString(String msg, int x, int y);
? drawLine(int x1, int y1, int x2, int y2);
©200
0 H
yun
Hoo
n Ch
o
13JAVA Programming Language
자바 애플릿의 실행(4)? Graphics 클래스의 drawXXX( ) 메소드(계속)
? drawRect(int x, int w, int h);
? drawOval(int x, int y, int w, int h);
©200
0 H
yun
Hoo
n Ch
o
14JAVA Programming Language
자바 애플릿의 실행(4)? Graphics 클래스의 drawXXX( ) 메소드(계속)
? drawRoundRect(int x, int y, int w, int h, int rw, int rh);
? drawArc(int x, int w, int h, int a, int b);
©200
0 H
yun
Hoo
n Ch
o
15JAVA Programming Language
자바 애플릿의 실행(4)? fillXXX( ) 메소드
? 도형을 그리고 내부를 색으로 채우는 메소드
? 종류? fillRect(int x, int y, int w, int h);? fillOval(int x, int y, int w, int h);? fillRoundRect(int x, int y, int w, int h, int rw,
int rh);? fillArc(int x, int y, int w, int h, int a, int b);
©200
0 H
yun
Hoo
n Ch
o
16JAVA Programming Language
자바 애플릿의 실행(5)? <APPLET>태그와 <PARAM>태그 사용 예제
<HTML><HEAD><!-- Generated by Kawa IDE --><TITLE>Applet Test</TITLE></HEAD><BODY><H1>First Heading</H1><HR><APPLET CODE=ParameterTest WIDTH=300 HEIGHT=300><PARAM NAME = LINK0 VALUE = "http://www.yahoo.co.kr"><PARAM NAME = LINK1 VALUE = "http://www.aiit.or.kr"><PARAM NAME = LINK2 VALUE = "http://www.soongsil.ac.kr"><PARAM NAME = LINK3 VALUE = "http://www.daum.net"><PARAM NAME = LINK4 VALUE = "http://www.javastudy.co.kr"><PARAM NAME = Title VALUE = "Let's go"> </APPLET><HR></BODY></HTML>
©200
0 H
yun
Hoo
n Ch
o
17JAVA Programming Language
자바 애플릿의 실행(6)? <APPLET>태그와 <PARAM>태그 사용 예제
import java.awt.*;import java.awt.event.*;
import java.applet.Applet;
public class ParameterTest extends Applet {
List linkList;Label title;
public ParameterTest() {
setLayout(new BorderLayout());
linkList = new List(2);
linkList.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {
System.out.println(e);
}});
title = new Label("No Title");
add("North", title);
add("Center", linkList);}
public void init() {
int linkCount=0;
String param;
while((param=getParameter("Link"+linkCount)) != null) { System.out.println(param);
linkList.add(param);
linkCount++;}
if((param=getParameter("title")) != null) {title.setText(param);
}System.out.println(param);
}
}
©200
0 H
yun
Hoo
n Ch
o
18JAVA Programming Language
애플릿에서 이미지와 사운드? 이미지와 사운드에 관련된 클래스 및 메소드
URL getCodeBase( );URL getDocumentBase( );Image getImage(URL url);Image getImage(URL url, String name);void resize(Dimension d);void resize(int width, int height);AudioClip getAudioClip(URL url);AudioClip getAudioClip(URL url, String name);static AudioClip newAudioClip(URL url);void play(URL url, String name);void loop( );void play( );void stop( );
©200
0 H
yun
Hoo
n Ch
o
19JAVA Programming Language
애플릿에서 이미지와 사운드? 사용 예제
<HTML><HEAD><!-- Generated by Kawa IDE --><TITLE>Applet title</TITLE></HEAD><BODY><H1>First Heading</H1><HR><APPLET CODE=ImageSoundTest WIDTH=300 HEIGHT=300></APPLET><HR></BODY></HTML>
©200
0 H
yun
Hoo
n Ch
o
20JAVA Programming Language
애플릿에서 이미지와 사운드? 사용 예제
import java.net.URL;import java.awt.*;
import java.applet.*;
public class ImageSoundTest extends Applet {
Image image;AudioClip audioClip, startClip;
public void init() {
MediaTracker tracker;
tracker = new MediaTracker(this);
image = getImage(getDocumentBase(), "WuChienLien.jpg");tracker.addImage(image, 0);
try {
tracker.waitForAll();} catch(InterruptedException e) {
System.out.println(e);return;
}resize(image.getWidth(this), image.getHeight(this));
audioClip = getAudioClip(getCodeBase(), "AudioClip.au");
try {
startClip = Applet.newAudioClip( new URL("canyon.mid"));
} catch(java.net.MalformedURLException e) {System.out.println(e);
}}
public void start() {
if(audioClip != null) audioClip.loop();
if(startClip != null) startClip.loop();}
public void stop() {
if(audioClip != null) audioClip.stop();
if(startClip != null) startClip.stop();}
public void paint(Graphics g) {
g.drawImage(image, 0, 0, this);}
}
©200
0 H
yun
Hoo
n Ch
o
21JAVA Programming Language
애니메이션 애플릿 작성? 자바 애니메이션
? 보통 여러 장의 그림은 일정 시간 간격을 두고화면에 디스플레이 시켜서 움직이는 듯하게보여주는 방식으로 사용
? 시계 프로그램은 매초 마다 시간을 그래픽스클래스의 drawString( )메소드 이용
? 더블 버퍼링 기법? 이미지를 메모리에 먼저 그린 다음에 화면에
출력하는 방법
©200
0 H
yun
Hoo
n Ch
o
22JAVA Programming Language
애니메이션 애플릿 작성? MediaTracker 클래스
? 모든 이미지가 로드될 때 까지 대기
? 그림이나 자바의 클래스는 비동기적으로 로드되기에init( )메소드에서 여러 장의 그림을 로드한다고 해도다른 메소드가 시작되기 전에 모든 그림이 로드되지않음.
? MediaTracker 은 여러 장의 그림을 모두 메모리에 저장하기 때문에 애니메이션에서 중요한 문제
MediaTracker(Component comp); // 생성자
// 메소드
addImage(Image image, int id); // 이미지 메모리에 저장
remove(Image(Image image); // 이미지 메모리에서 제거
©200
0 H
yun
Hoo
n Ch
o
23JAVA Programming Language
애플릿과 브라우저 사이의 통신? 애플릿
? 웹 브라우저에 내장된 자바 가상 머신에 의해 수행되는 자바 바이트 코드
? 하는 일? 1. 브라우저의 상태 창에 메시지 출력
? 2. 브라우저가 현재 보여주고 있는 문서를 애플릿이 요청
1. Void showStatus(String msg); // 문자열 브라우저에 출력
2. AppletContextgetApplet( ); // 통신 객체 획득
void showStatus(String status); // 문자열 브라우저에 출력
void showDocument(URL url); // URL에 해당하는 문서 출력
©200
0 H
yun
Hoo
n Ch
o
24JAVA Programming Language
애플릿과 브라우저 사이의 통신? 자바 애플릿을 이용한 북마크 관리 예제
<HTML><HEAD><!-- Generated by Kawa IDE --><TITLE>Applet title</TITLE></HEAD><BODY><H1>First Heading</H1><HR><APPLET CODE=AppletBrowserCommTest WIDTH=300 HEIGHT=300></APPLET><HR></BODY></HTML>
©200
0 H
yun
Hoo
n Ch
o
25JAVA Programming Language
애플릿과 브라우저 사이의 통신? 자바 애플릿을 이용한 북마크 관리 예제
import java.awt.event.*;import java.net.*;
import java.applet.*;
public class AppletBrowserCommTest extends Applet {
private List urls = new List(4, false);private Choice target = new Choice();
private AppletContext appletContext=null;
public void init() {
setLayout(new BorderLayout());
urls.addItem("http://park.konkuk.ac.kr");urls.addItem("http://www. konkuk.ac.kr");
urls.addItem("http://www. aiit.or.kr");
urls.addItem("http://www.sun.com");
urls.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {
appletContext = getAppletContext();
System.out.println(e.getActionCommand());
appletContext.showStatus("My status: " +e.getActionCommand()+", "
+target.getSelectedItem());
try {
appletContext.showDocument(newURL(e.getActionCommand()),
target.getSelectedItem());} catch(MalformedURLException ee) {
appletContext.showStatus("URL Exception: " + ee);}
}
});
add("Center", urls);
target = new Choice();
target.add("_self");
target.add("_parent");target.add("_top");
target.add("_blank");target.add("new");
add("North", target);}
}
©200
0 H
yun
Hoo
n Ch
o
26JAVA Programming Language
애플릿과 브라우저 사이의 통신? 같은 HTML페이지 내에 포함된 애플릿 사이의 통신
<HTML><HEAD><!-- Generated by Kawa IDE --><TITLE>Applet title</TITLE></HEAD><BODY><CENTER>
<H1>Communication between Two Applet</H1><HR><APPLET CODE=MyApplet1 WIDTH=250 HEIGHT=250 NAME = MyApplet1></APPLET><APPLET CODE=MyApplet2 WIDTH=200 HEIGHT=50 NAME = MyApplet2></APPLET><HR></BODY></HTML>
©200
0 H
yun
Hoo
n Ch
o
27JAVA Programming Language
애플릿과 브라우저 사이의 통신? 같은 HTML페이지 내에 포함된 애플릿 사이의 통신
//MyApplet1.java
import java.awt.*;
import java.applet.*;
public class MyApplet1 extends Applet {
public static String myName = "My First Applet" ;Label label;
public void init() {setSize(250, 250);
label = new Label(myName);
add(label);
}
public String toString() {
return myName ;}
}
// MyApplet2.javaimport java.awt.*;import java.applet.*;public class MyApplet2 extends Applet {
Label label;MyApplet1 anApplet;public void init() {
setLayout(new BorderLayout());setSize(200, 50);for(int i=0;i<10;i++) {
try {Thread.sleep(200);
} catch (Exception e) {}anApplet=(MyApplet1)(getAppletContext().getApplet("MyApplet1"));if(anApplet != null) {
break;}
}System.out.println("applet: "+anApplet+", "+anApplet.toString());add("North", new Label("My Second Applet"));if(anApplet != null) {
label = newLabel(anApplet.toString());} else {
label = newLabel("Unknown Applet");}System.out.println("label: "+label);add("South", label);
}}
©200
0 H
yun
Hoo
n Ch
o
28JAVA Programming Language
브라우저 알아내기 및 실행? AppletContext
? 애플릿이 실행되고 있는 환경에 대한 정보 제공
? 해당 메소드를 이용한 현재 수행중인 브라우저 식별 가능
? 제공되는 메소드? public AppletContext getApplet( );? public String getAppletInfo( );
©200
0 H
yun
Hoo
n Ch
o
29JAVA Programming Language
브라우저 알아내기 및 실행? 사용 예제
<HTML><HEAD><!-- Generated by Kawa IDE --><TITLE>Applet title</TITLE></HEAD><BODY><H1>First Heading</H1><HR><APPLET CODE=BrowserIDTest WIDTH=300 HEIGHT=300></APPLET><HR></BODY></HTML>
©200
0 H
yun
Hoo
n Ch
o
30JAVA Programming Language
브라우저 알아내기 및 실행? 사용 예제
import java.lang.*;
import java.util.*;import java.awt.*;
import java.applet.Applet;
public class BrowserIDTest extends Applet {
private String browserID = "Application";
public void init() {
String appletContext = getAppletContext().toString();
if(appletContext.startsWith( "sun.applet.AppletViewer")) {browserID = "Appletviewer";
} else if(appletContext.startsWith("netscape.applet.")) {browserID = "Communicator";
} else if(appletContext.startsWith("com.ms.applet.")) {
browserID = "Internet Explorer";} else if(appletContext.startsWith("sunw.hotjava.tags.TagAppletPanel")) {
browserID = "HotJava";} else if(appletContext.startsWith("sun.plugin.navig.win32.AppletPlugin")) {
browserID = "Communicator Plugin ";
} else if(appletContext.startsWith("sun.plugin.ocx.ActiveXApplet")) {browserID = "Internet Explorer Plugin";
}}
public void paint(Graphics g) {
g.drawString("browser ID: " + browserID, 10, 20);g.drawString("getAppletContext(): " + getAppletContext(), 10, 40);
g.drawString("getAppletContext().toString(): "+ getAppletContext().toString(), 10, 60);
g.drawString("getAppletInfo(): " + getAppletInfo(), 10, 80);
System.out.println("browser ID: " + browserID);
System.out.println("getAppletContext(): " + getAppletContext());System.out.println("getAppletContext().toString(): "
+ getAppletContext().toString());System.out.println("getAppletInfo(): " + getAppletInfo());
}
}
©200
0 H
yun
Hoo
n Ch
o
31JAVA Programming Language
애플릿 작성? 실제 스크린 크기를 고려한 애플릿 작성
<HTML><HEAD><!-- Generated by Kawa IDE --><TITLE>Applet title</TITLE></HEAD><BODY><H1>First Heading</H1><HR><APPLET CODE=ScreenSizeTest WIDTH=300 HEIGHT=300></APPLET><HR></BODY></HTML>
©200
0 H
yun
Hoo
n Ch
o
32JAVA Programming Language
애플릿 작성? 실제 스크린 크기를 고려한 애플릿 작성
import java.awt.*;
import java.applet.Applet;public class ScreenSizeTest extends Applet {
public void init() {
Panel p = new Panel();Button b1 = n e w Button( "B1");
Button b2 = n e w Button( "B2");setLayout(new FlowLayout(FlowLayout.CENTER));
p.add(b1);
p.add(b2);add(p);
}public void paint(Graphics g) {
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();Rectangle r = getBounds();
g.drawString("Screen size = " + d.width + " x " + d.height, 10, 100);g.drawString("Location = " + getLocation().x + "," + getLocation().x, 10, 130);
g.drawString("Bounds = " + r.x + "," + r.y + "," + r.width + "," + r.height, 10, 150);
System.out.println("Screen size = " + d.width + "x" + d.height);
System.out.println("Location = " + getLocation().x + "," + getLocation().x);System.out.println("Bounds = " + r.x + "," + r.y + "," + r.width + "," + r.height);
}}
©200
0 H
yun
Hoo
n Ch
o
33JAVA Programming Language
JAR(Java Archive)파일? JAR 파일
? 여러 개의 파일을 하나의 파일로 묶어주는 역할
? ZIP형식의 파일과 호환? 파일 압축하는 기능 제공
? 장점? 파일을 별도로 각각 전송 할 때 보다 더 빠르게
전송? 전송될 파일의 크기를 줄여 줌? 각 파일에 대한 추가 정보를 별도의 파일에 저
장 및 포함시킬 수 있으며,? 전자서명 지원함으로 보안에 관한 제약 사항
해결
©200
0 H
yun
Hoo
n Ch
o
34JAVA Programming Language
JAR(Java Archive)파일? 사용법
Usage: jar {ctxu} [vfm0M] [jar-file] [manifest-file] [-C dir] files . . .Options:
- c(Create)- t(Table)- u(Update)- x(eXtract)- v- f- m- 0- M- -C
사용 예 :jar cf MyArchive.jar *.class *.gif *.aujar cvf classes.jar MyClass1.class Myclass2.classjar cvf0 classes.jar MyClass1.class Myclass2.classjar cvfm classes.jar mymanifest –C MyDir/.jar tf classes.jar
©200
0 H
yun
Hoo
n Ch
o
35JAVA Programming Language
JAR(Java Archive)파일? JAR파일과 애플릿
? 애플릿을 JAR파일로 묶어 사용하기 위해서는<APPLET>태그의 ARCHIVE속성 사용
? JAR는 자바1.1 부터 지원? 우선 필요한 클래스 파일과 데이터 파일을 담
은 JAR 파일을 생성 한 후, 다음과 같이 지정
<APPLET CODE = “Myclass.class” ARCHIVE = “MyArchive.jar”
WIDTH = 300 HEIGHT = 300>
</APPLET>