Įskiepių specifika. internetu iškviečiami įskiepiai dėl saugumo apribojimų negali:

18
kiepių specifika. ternetu iškviečiami įskiepiai dėl saugu ribojimų negali: Nuskaityti ir įrašyti į bet kokį varto isko failą ir nuskaityti failų katalogu Komunikuoti su kitais serveriais šskyrus tik įskiepio savininką - server Paleisti jokio vykdomojo failo Pasinaudoti bet kokiais vartotojo ompiuterio platformos failais, pvz. DLL ei įskiepį paleidžiate su appletviever, alima nurodyti leidžiamus skaitymui r rašymui katalogus; tai nurodoma java.policy faile d iškviesti greičiau reikalingus failus lite pirma juos supakuoti, pvz: jar cf manoKlase.jar *.class panaudoti: pplet code=manoKlase.class chive=manoKlase.jar dth=200 height=100>

Upload: uyen

Post on 05-Jan-2016

30 views

Category:

Documents


0 download

DESCRIPTION

Įskiepių specifika. Internetu iškviečiami įskiepiai dėl saugumo apribojimų negali: 1. Nuskaityti ir įrašyti į bet kokį vartotojo disko failą ir nuskaityti failų katalogus 2. Komunikuoti su kitais serveriais išskyrus tik įskiepio savininką - serverį. 3. Paleisti jokio vykdomojo failo - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Įskiepių specifika. Internetu iškviečiami įskiepiai dėl saugumo apribojimų negali:

Įskiepių specifika.

Internetu iškviečiami įskiepiai dėl saugumoapribojimų negali:1. Nuskaityti ir įrašyti į bet kokį vartotojo disko failą ir nuskaityti failų katalogus2. Komunikuoti su kitais serveriais išskyrus tik įskiepio savininką - serverį.3. Paleisti jokio vykdomojo failo4. Pasinaudoti bet kokiais vartotojo kompiuterio platformos failais, pvz. DLL

Jei įskiepį paleidžiate su appletviever,galima nurodyti leidžiamus skaitymuiar rašymui katalogus; tai nurodoma.java.policy faile

Kad iškviesti greičiau reikalingus failus,galite pirma juos supakuoti, pvz:

> jar cf manoKlase.jar *.class ir panaudoti:

<applet code=manoKlase.class archive=manoKlase.jar width=200 height=100>

Page 2: Įskiepių specifika. Internetu iškviečiami įskiepiai dėl saugumo apribojimų negali:

Kaip dirba įskiepiai

import java.applet.Applet; import java.awt.Graphics; public class HelloWorldApplet extends Applet { public void init() {

resize(250,250);} public void paint(Graphics g) {

g.drawString("Hello world!",25,25); } }

Java įskiepis daugiausiai reaguoja į įvykius:

Page 3: Įskiepių specifika. Internetu iškviečiami įskiepiai dėl saugumo apribojimų negali:

Automatiškai kviečiami įskiepio metodai:1. init(); 2. start(); 3. paint(); 4. stop();

import java.applet.*;import java.awt.*; public class Count extends Applet {int InitCount=0, StartCount=0,StopCount=0, PaintCount=0;

public void init() { resize(250,75); InitCount ++; } public void start(){ StartCount++; }public void stop() { StopCount++; }public void paint(Graphics g) { PaintCount++; String Output = new String( "Inits: "+InitCount+ " Starts: "+StartCount+ " Stops: "+StopCount+ " Paints: "+paintCount);g.drawString(Output,25,25); } }

Iškvietus įskiepį rezultatas bus toks:Inits: 1 Starts: 1: Stops: 0 Paints 1

Page 4: Įskiepių specifika. Internetu iškviečiami įskiepiai dėl saugumo apribojimų negali:

Metodas Aprašymasinit() Kviečiamas tik vieną kartą, pakraunant įsk.

start()Kviečiamas kiekvieną kartą, kai puslapis suįskiepiu yra aktyvuojamas.

stop()Iškviečiamas kiekvieną kartą, kai puslapissu įskiepiu tampa neaktyvus.

destroy() Iškviečiamas uždarant puslapį su įskiepiu.paint(Graphics g)

Kviečiamas kiekvieną kartą, kai įskiepiuireikia perpiešti jo grafinį langą

Automatinio iškvietimo taisyklės:

Įskiepis dėl saugumo apribojimų negali iškviestivartotojo kompiuterio duomenų failą, tačiau galiiškviesti garso ir vaizdo failus, turinčius URL !

URL patalpinti vaizdo ir garso resursamsiškviesti naudojama :

1. java.net.*; klasė

2. URL tikrinama try - catch bloku

3. Duomenys skaitomi lygiagrečiai su toliau

vykdoma Java programa

Page 5: Įskiepių specifika. Internetu iškviečiami įskiepiai dėl saugumo apribojimų negali:

import java.applet.*; import java.awt.*; import java.net.*; public class WebApplet extends Applet {

private Image myImage; private AudioClip mySound; private URL ImageURL; private URL SoundURL;

public void init() { resize(250,250); try {

//Apibrėžiame resursusImageURL = new URL(getDocumentBase(),

"../images/sample.gif");SoundURL = new URL(getDocumentBase(),

"../sounds/sample.au"); }

//Apibrėžiame URL išimtįcatch (MalformedURLException e) {}//Nuskaitome vaizdąmyImage = getImage(ImageURL);//Nuskaitome vaizdąmySound = getAudioClip(SoundURL);

}

public void start() {//Grosime ciklu mySound.loop(); }

public void stop() {//Sustabdome grojimą mySound.stop(); }

public void paint(Graphics g){//Nupiešiame g.drawImage(myImage,0,0,this); }}

Vaizdo ir garso nuskaitymo ir panaud-o pvz:

Page 6: Įskiepių specifika. Internetu iškviečiami įskiepiai dėl saugumo apribojimų negali:

Įvykių apdorojimas.Priklausomai nuo vartotojo veiksmo paleidžiamos įskiepio programos.Pvz:

public boolean mouseMove(Event evt, int x, int y) {

//Code here is run when the //mouse is moved

return true; //The event has //been handled

}

public boolean mouseDown(Event evt, int x, int y) {

//Code here is run when the //mouse key is pressed

down

return true; //The event has //been handled

}

Page 7: Įskiepių specifika. Internetu iškviečiami įskiepiai dėl saugumo apribojimų negali:

ĮvykisJava 1.0

Įvykis Java1.1+

Aprašymas

mouseDown(Event,int,int)

processMouseEven(MouseEvent)

Paspaustas pelės mygtukas.Sveikieji skaičiai nurodo įvykiokoordinates.

mouseUp(Event,int,int)

processMouseEvent(MouseEvent)

Pelės mygtukas atlaisvintas.

mouseMove(Event,int,int)

processMouseMotionEvent(MouseEvent)

Pelė paslinkta.

mouseDrag(Event,int,int)

processMouseMotionEvent(MouseEvent)

Pelė paslinkta esant nuspaustammygtukui.

mouseEnter(Event,int,int)

processMouseEvent(MouseEvent)

Pelės žymeklis pateko į įskiepiosritį.

mouseExit(Event,int,int)

processMouseEvent(MouseEvent)

Pelės žymeklis išėjo iš įskiepiosrities.

keyDown(Event,int)

processKeyEvent(KeyEvent)

Nuspaustas klaviatūros arbafunkcinis klavišas. Sveikasisskaičius nurodo konkretųnuspaustą klavišą.

keyUp(Event,intt)

processKeyEvent(KeyEvent)

Atleistas klaviatūros arbafunkcinis klavišas.

Galimi įvykiai

Page 8: Įskiepių specifika. Internetu iškviečiami įskiepiai dėl saugumo apribojimų negali:

import java.applet.*; import java.awt.*; import java.net.*;

public class CursorApplet extendsApplet {

//The position of the mouseprivate int mouse_x, mouse_y;//Do we want to follow the mouse?private boolean Follow = true;private Image CursorImage;

public void init() {mouse_x = 125;mouse_y = 125;resize(250,250);String CursorFile =

getParameter("CURSORFILE");try {

URL CursorURL = newURL(CursorFile);

CursorImage =getImage(CursorURL);

}catch (MalformedURLException e)

{CursorImage =

createImage(0,0);}

}

Interaktyvaus įskiepio pvz:

Page 9: Įskiepių specifika. Internetu iškviečiami įskiepiai dėl saugumo apribojimų negali:

public void paint(Graphics g) {//A simple border

g.drawRect(0,0,249,249);//Draw cursor at the mouse's location

g.drawImage(CursorImage,mouse_x,mouse_y,this);}

public boolean mouseMove(Event evt, intx, int y) {if (Follow) {

//Update our local mouse informationmouse_x = x;mouse_y = y;//Redraw the graphics windowrepaint();

}return true;}

public boolean mouseDown(Event evt, intx, int y) {

//If it's not one thing...if (Follow) {Follow = false;}//It's anotherelse {Follow = true;}return true;

}}

Page 10: Įskiepių specifika. Internetu iškviečiami įskiepiai dėl saugumo apribojimų negali:

Klaviatūros įvykiaiKlaviatūros mygtuko nuspaudimo apdorojimo pvz:

public boolean keyDown(Event evt, int key){

switch(key) {

case Event.UP:

case Event.DOWN:

case Event.LEFT:

case Event.RIGHT:

default:

} return true;

}

Galimi įvykio identifikatoriai:

UP DOWN LEFT RIGHT

PGUP PGDOWN

HOME END

F1-F12

Page 11: Įskiepių specifika. Internetu iškviečiami įskiepiai dėl saugumo apribojimų negali:

Eventkintamasis

Aprašymas

publicObject target

Komponentė kur įvykis atsitiko. Įskiepio atveju taikomponente būna pats įskiepis.

public longwhen

Įvykio laika. "when" kintamajame rašomas long tiposveikasis skaičius nurodantis kiek praėjomilisekundžių nuo 00:00:00, 1970 sausio 1 d. Java turijava.lang.System.currentTimeMillis metodą, kurisgrąžina šią reikšmę.

public int id Įvykio tipas (žr. Įvykių tipų lentelę).public int x Įvykio x koordinatė.public int y Įvykio y koordinatė.public intkey

Įvykio identifikatorius.

public intmodifiers

Gretimų įvykių būsena.

publicObject arg

Sąlyginis argumentas. Jis nenaudojamas pelės irklaviatūros įvykių atveju ir rezervuotas ateičiai.

Įvykio (Event) klasės kintamieji

handleEvent metodo funkcija:

Page 12: Įskiepių specifika. Internetu iškviečiami įskiepiai dėl saugumo apribojimų negali:

Įskiepio klasės hierarchija:

Object Java klasių hierarchijos viršūnė

Component

Klasė Aprašymas

Grafinis objektas ekrane galintis bendrauti su vartotoju

Container Grafinių objektų sritis. Yra add(),paint(Graphics), update (Graphics)

Panel Grafinių objektų išdėstymąapibrėžianti klasė (LayoutManager)

AppletJava kalba valdomų Interneto pus-lapiuose talpinamų įskiepių klasė

Window Paprastas grafinis langas be krašto

Frame Grafinis langas su pavadinimu ir kraštu

Dialog Grafinis langas naudojamasįvesti informacijai

Page 13: Įskiepių specifika. Internetu iškviečiami įskiepiai dėl saugumo apribojimų negali:

public boolean handleEvent(Event e){ switch (e.id) { case Event.MOUSE MOUSE_DOWN: case Event.MOUSE MOUSE_MOVE: }}

handleEvent metodo perrašymas:

Dirbtinis įvykių generavimas:Event DirbtEvt;

long time = System.currentTimeMillis();

DirbtEvt = new Event(this,time,MOUSE_MOVE,

new_x,new_y,0,0,null);

postEvent(DirbtEvt);

Konstruktorius Parametrų aprašymasEvent(Object,long,in

t,int,int,int,int,Object)Paskirties komponentė, laikas, tipas, x,y koordinatė, identifikatorius,modifikatorius, argumentas.

Event(Object,long,int,int,int,int,int)

Paskirties komponentė, laikas, tipas, x,y koordinatė, identifikatorius,modifikatorius.

Event(Object,int,int,Object)

Paskirties komponentė, įvykio tipas, x koordinatė, argumentas.

Galimi įvykio konstruktoriai:

Page 14: Įskiepių specifika. Internetu iškviečiami įskiepiai dėl saugumo apribojimų negali:

Animacija su įskiepiais

1. Animacijai reikia gijos

2. Kadangi klasė negali praplėsti kartu irįskiepio ir gijos, naudojamas interfeisas

Gijų metodai AprašymasisAlive() Grąžina loginę reikšmę ar gija įjungta.

sleep(long)Sustabdo giją long milisekundžių.Eina per išimtį InterruptedException,kuri gaunama kitai gijai ją pertaukus.

start() Paleidžia giją.stop() Sustabdo giją.suspend() Laikinai sustabdo giją.resume() Paleidžia laikinai sustabdytą giją.

Gijų metodai:

Page 15: Įskiepių specifika. Internetu iškviečiami įskiepiai dėl saugumo apribojimų negali:

import java.applet.*; import java.awt.*; import java.net.*;public class AKursor extends Applet implements Runnable {private int mouse_x, mouse_y; private Image CursorImages[]; private int CursorIndex = 0; private Thread anim = null; private boolean paused = false; public void init() { resize(250,250); applet anim = new Thread(this); mouse_x = 125; mouse_y = 125;CursorImages = new Image[5]; int i; String CursorParam; URL CursorURL; for (i=0; i<5; i++) { CursorParam = getParameter("CURSORFILE"+i); try { CursorURL = new URL(CursorParam); CursorImages[i] = getImage(CursorURL); } catch (MalformedURLException e) {CursorImages[i] = createImage(0,0); } } } public void start() {start(); } //Start the run method anim. public void stop() { if (anim!=null && anim.isAlive()) anim.stop(); } public void paint(Graphics g) { int px, py; Image Cursor = CursorImages[CursorIndex]; g.drawRect(0,0,249,249); px = mouse_x - Cursor.getWidth(this)/2; py = mouse_y - Cursor.getHeight(this)/2;g.drawImage(Cursor,px,py,this); }

Animuoto kursoriaus įskiepis

Page 16: Įskiepių specifika. Internetu iškviečiami įskiepiai dėl saugumo apribojimų negali:

public boolean mouseMove(Event evt, int x, int y) {

mouse_x = x; mouse_y = y;

return true; }

public boolean mouseDown(Event evt, int x, int y) {

//If paused, restart the run method

if (paused) { anim.resume(); paused = false; }

//Otherwise, pause the run method

else { anim.suspend(); paused = true; }

return true; }

public void run() {

while (anim!=null) {

try { //Suspend for 50 milliseconds

anim.sleep(50); }

catch (InterruptedException e) {}

//Move along to the next image

CursorIndex = CursorIndex + 1;

if (CursorIndex==5) {

//Start again at the beginning

CursorIndex = 0; }

repaint();

} } }

Įvykių apdorojimas:

Page 17: Įskiepių specifika. Internetu iškviečiami įskiepiai dėl saugumo apribojimų negali:

Mirkčiojimo problemos sprendimas

Problemos priežastis, kad repaint() kviečia:

public void update(Graphics g) { g.setColor(getBackground()); g.fillRect(0, 0, width, height); g.setColor(getForeground()); paint(g);}

Paprastas sprendimas: perrašyti update():

public void update(Graphics g) {paint(g);

}

Kitas sprendimas - panaudojimas dvigubo buferio:

Page 18: Įskiepių specifika. Internetu iškviečiami įskiepiai dėl saugumo apribojimų negali:

Animacijos pagerinimas:

private Image BuferImage;

private Graphics BuferGraphics;

public void init() {

resize(250,250);

Image = createImage(250,250);

BuferGraphics = BuferImage.getGraphics();… // ankstesnis kodas}public synchronized

void update(Graphics g) {

paint(BuferGraphics);

//Do applet painting to our canvas

g.drawImage(BuferImage,0,0,this);

//Paint the real graphics window

}

Pastabos:1. Dėl fono neperpiešimo judinantįskiepį gali atsirasti nenutrinti vaizdo pėdsakai2. Modernioje JApplet klasėje mirkčiojimo nėra