Java -sovellukset jaetaan kahteen eri ryhmään. Ensimmäisen ryhmän muodostavat yksinään toimivat sovellukset, jotka on tehty tietylle käyttöjärjestelmäalustalle. Windows NT:lle käännetty java sovellus ei voi toimia sellaisenaan unix -järjestelmäalustalla ja niin edelleen. Sovellusta ajetaan Java -tulkin päällä komentotasolla, kuten kurssin alkuosassa jatkuvasti tehtiin. Yksinään toimiva sovellus saa koneelta käyttöönsä resursseja riippuen siitä, millä käyttäjätilillä ohjelmaa ajava prosessi luodaan. Tällä tarkoitetaan sitä, että onko ko. käyttäjätilillä oikeutta käyttää niitä resursseja, joihin ohjelmassa viitataan. Toisen luokan muodostavat javaa tukevan WWW -selaimen päällä toimivat sovellukset. Tälläisiä ovat esimerkiksi Java -appletit. Niiden huonona puolena on kuitenkin, ettei Appletilla ole mahdollisuuksia käyttää kaikkia resursseja. Apletti ei voi
![]() |
lukea ja kirjoittaa asikastietokoneen tiedostoja |
![]() |
kommunikoida muiden www -sivustojen, kuin sen kanssa, joka sisälti appletin |
![]() |
käynnistää sovellusohjelmia asiakkaan koneessa |
![]() |
käyttää hyväkseen asiakaskoneen järjestelmän ohjelmia tai kirjastoja |
Rajoitukset on tehty internet -turvallisuuden takia. Olisihan aika ikävää, jos kuka tahansa pystyisi javalla tekemään ohjelman, joka esimerkiksi ensitöikseen www -sivun avauduttua poistaisi järjestelmästä kaikki kilpailevien tuotteiden tiedostot.
Applettien rajoitukset voidaan kiertää JDK1.2:n mukana olevassa sertifikaatti- järjestelmällä, jolloin sertifikaatilla varustettu apletti saa kaikki yksinään toimivan java -sovelluksen oikeudet. Tällä kurssilla ei käsitellä sertifikointijärjestelmää, mutta se on selitetty yksityiskohtaisesti "Teach Yourself Java 1.2 in 21 days" (Borland Press), 1998.
Appletit luodaan seuraavalla tavalla, kuten esimerkissä E44 todettiin. Tämä tapahtui siis seuraavasti
Teemme nyt esimerkiksi oman appletin ja ajamme sitä tällä www-sivulla.
import java.awt.*;
public class E52 extends java.applet.Applet {
// Tähän oma applettikoodi, jossa on nyt vain ylikirjoitettu paint() -metodi
Font f = new Font("TimesRoman",Font.BOLD,36);
public void paint(Graphics ikkuna){
ikkuna.setFont(f);
ikkuna.setColor(Color.blue);
ikkuna.drawString("Elämäni toinen appletti ", 5, 40);
}
}
<html>
<head>
<meta name="GENERATOR" content="Microsoft FrontPage 3.0">
<title>Esimerkki E52</title>
</head>
<body>
<p>
<applet width="600" height="100" code="E52.class">
Java -appletti</applet>
</p>
<p>Tässä java appletti, jonka html-koodi näyttää tältä</p>
</body>
</html>
( meta-tagista ei tarvitse välittää. Käyttämäni HTML -editori lisäilee sen omia aikojaan ja sen voi hyvin poistaa HTML -sivulta)
Appletti on laitettu otsikon jälkeen. Voit tutkia tämän sivun lähdekoodia niin huomaat, että edellisen otsikon jälkeen on applet -tagi).
Applet -tagissa esiintyvät parametrit align, hspace, vspace code ja codebase on selitetty tavallisimmimpien wysiwyg -editorien helpeissä. Useimmat niistä ovat tuttuja kuvankäsittelystä. (esim. tässä on selitetty align -parametrin attribuutit). Mainittakoon kuitenkin, errä code -parametri viittaa siihen tiedostonimeen, jossa .class tavukooditiedosto on ja codebase parametriin laitetaan se kansio, missä .class -tavukooditiedosto sijaitsee. Jos se on samassa kansiossa, missä html -sivu sijaitsee, codebase -parametriä ei tarvitse laittaa.. Jos siis laitat appletin .class tavukooditiedoston samaan kansioon, missä html -sivu sijaitsee, et tarvitse codebase -parametria laisinkaan.
Toinen tapa lisätä appletti html -sivulle on käyttää Applet -tagin sijasta Object -tagia. Seuraavassa on malliesimerkki object -tagiin käytöstä. Tässä yhteydessä ei puututa sen parametreihin.
<OBJECT CLASSID="java:E52.class" WIDTH=600 HEIGHT=100>
Appletti ei näy selaimessasi, koska se ei tue javaa!!!
</OBJECT>
Appletti -luokka sisältää joukon perumetodeja, joita voidaan (usein pakko) ylikirjoittaa halutulla tavalla. Appletin toiminnan kannalta paint() -metodi on keskeinen, mutta myös muita tärkeitä ylikirjoitettavia metodeja on olemassa.
Appletissa ei ole lainkaan main() metodia. Sen sijaan appletti sisältää erilaisia metodeja, joita kutsutaan aina tilanteen niin vaatiessa. Appletti alustetaan init() -metodilla, aloitetaan start() -metodilla, pysäytetään stop() -metodilla ja poistetaan destroy() -metodilla. Appletin piirtoalueen päivitys tehdään paint() -metodilla. Seuraavaksi on lyhyesti käyty läpi kaikki tärkeimmät appletti -luokan perusmetodit. Sitä mukaa kun asia etenee, niitä käsitellään lisää.
init() -metodia kutsutaan, kun appletti ladataan html -sivulle. Siinä kannattaa luoda kaikki appletin tarvitsemat oliot, alustaa ne, ladata kuvat ja fontit ja asettaa tärkeimpien vakioiden arvot. Tämä tapahtuu ylikirjoittamalla init() -metod seuraavasti
public void init(){
// tähän kirjoitetaan metodin koodi
}
Alustamisen jälkeen appletti aloitetaan. Appletti voidaan aloittaa useaan kertaan mutta vain kerran alustaa. Tälläinen tilanne syntyy, jos selaimen käyttäjä hyppää appletin sisältävän sivun jälkeen takaisin appletti -sivulle. Joka kerta kun hän palaa takaisin tälle sivulle start() -metodi suoritetaan. start() -metodi ylikirjoitetaan seuraavasti
public void start(){
// tähän kirjoitetaan metodin koodi
}
Appletii voidaan koska tahansa pysäyttää stop() -metodilla. Metodi suoritetaan myös aina, kun selaimessa hypätään jollekin toiselle sivulle. Se käyttäytyy siis hyvin samalla tavalla kuin start() -metodi. Lopetusmetodi ylikirjoitetaan seuraavasti
public void stop(){
// tähän kirjoitetaan metodin koodi
}
Appletti voidaan kokonaa hävittää, jolloin sen tarvitsemat resurssit vapautetaan muuhun käyttöön. destroy() -metodia ei kuitenkaan voi suoranaisesti käyttää appletin poistamiseen. Sitä käytetään käytännössä appletin sisältämien säikeiden poistamiseen. Säikeisiin palaamme aivan kurssin lopussa. Poistometodi ylikirjoitetaan seuraavasti
public void destroy(){
// tähän kirjoitetaan metodin koodi
}
Appletin piirtopinnalla tarkoitetaan sitä aluetta selaimen ikkunasta, joka on ilmoitettu APPLET -tagin width ja height -parametreissa. Tämä piirtopinta pitää aina piirtää uudelleen, mikäli appletissa muutetaan sen sisältöä. Piirtopintaa ei päivitetä automaattisesti vaan se tehdään repaint() -metodilla, joka kutsuu paint() -metodia. paint() -metodia kutsutaan kuitenkin myös muulloin.
![]() |
ensimmäisen kerran sitä kutsutaan applettia ladattaessa. |
![]() |
samoin sitä kutsutaan joka kerta kun sivulle palataan joltain muulta www -sivulta. |
![]() |
lisäksi sitä kutsutaan käyttöjärjestelmän puolesta silloin, kun selaimen ikkuna naksautetaan näkyviin jonkin muun ikkunan takaa tai vieritetään selaimessa. |
![]() |
sitä kutsutaan myös käyttöjärjestelmästä silloin, kun ikkunaa skaalataan venyttämällä uudelleen (tämä edellyttää tietysti, että skaalaus on sallittu) tai vieritetään palkista. (ts aina, kun appletin piirtopintaa siirretään. |
Piirtometodi ylikirjoitetaan seuraavasti
public void paint(Graphics g){
// tähän kirjoitetaan metodin koodi
}
Kaikki tässä mainitut metodit sisältävät siis samanlaisen piirteen. Niitä voidaan kutsua
![]() |
suoraan appletista ohjelman kirjoittajan haluamalla tavalla |
![]() |
selain kutsuu niitä tietyssä vaiheessa |
![]() |
käyttöjärjestelmä kutsuu niitä tietyssä vaiheessa |
Tämä tulee aina ottaa huomioon metodeja ylikirjoitettaessa.
Ladattaessa html -sivu selaimeen palvelimelta, latautuu ensin itse html -sivu. Sen jälkeen latautuvat java -ohjelmat, sen vaatimat luokat, kuvat yms. tiedostot. Jokaisen palan haku aloitetaan yhteyden muodostamisella palvelimeen ja lopetetaan yhteyden katkaisemiseen. Yhteyksien muodostaminen ja lopettaminen ovat varsin aikaa vievää puuhaa. Poistaakseen tämän ongelman, voidaan html -sivun kaikki javapalaset koota yhteen jar -asiakirjatiedostoksi (java archive). JDK:n komennolla jar voidaan appletin käyttämät tiedostot tallettaa yhdeksi asiakirjatiedostoksi. Tiedosto voi olla pakattu ZIP -standardilla tai olla pakkaamaton. Seuraavalla komennolla muodostettaisiin ohjelman animaatio.java arkistotiedosto
jar cf animaatio.jar animaatio.class *.gif
Optiolla cf tarkoitetaan seuraavaa. Optio c merkitsee, että uusi Java -arkistotiedosto luodaan, ja f merkitsee, että seuraavassa argumentissä on mainittu tulostiedoston nimi.
Vastaavasti html -sivulle kirjoitetaan applet -tagiin
<applet code="animaatio.class" archive="animaatio.jar"
width=45 height=40>
</applet>
Selain hakee .jar tiedoston, purkaa sen ja suorittaa appletin, joka on mainittu code -parametrissa. Kaikissa uusimmissa www -selaimissa on tuki javan arkistotiedostoille.
Mikäli halutaan pienentää siiirrettävän tiedon määrää, voidaan .jar tiedosto pakata zip tai cab -tiedostoksi. Tällöin applet -tagi näyttäisi seuraavalta. (esimerkki pätee zip -pakkasstandardille)
<applet code="animaatio.class" archive="animaatio.zip" width=45
height=40>
</applet>
WWW- selain osaa purkaa pakkausen automaattisesti.
Ei nakkikioskia - ei kahvilaa,
vain ravintola ja tylsää asemaa,
voi mikä toivottomuus - Pieksämäen asemalla bluesVastaus
Appletille voidaan välittää html -sivuilta parametreja applet -tagin sisään kirjoitettavalla param -tagilla seuraavasti.
<applet width="600" height="100" code="E53.class">
<PARAM NAME = font VALUE = "TimesRoman">
<PARAM NAME = size VALUE = "24">
Java -appletti
</applet>
Appletissa vastaavat käytetään Applett -luokan getParameter() -metodia. Seuraavksi korjaamme ohjelmaa E52 siten, että parametrit f ja size luetaan html -sivulta eo. param -tageilla. Appletissa varaudutaan siihen, että param -tagit ovat unohtuneet ja näinollen f ja/tai size saavat arvon null. Tämä tehdään yleensä init() -metodissa
import java.awt.*;
public class E53 extends java.applet.Applet {
Font f; // pakko olla tässä. Ei voi laittaa init() -metodiin, koska silloin paint() -metodissa ei sitä ole esitelty
public void init() {
String tmp = getParameter("size");
if (tmp == null) tmp="24";
int koko = Integer.parseInt(tmp); // getParam() palauttaa aina String -tyypin.
// Keskeytykseen olisi syytä varautua
String merkisto = getParameter("font"); //
if (merkisto == null) merkisto = "TimesRoman";
f = new Font(merkisto,Font.BOLD,koko);
}
public void paint(Graphics ikkuna){
ikkuna.setFont(f);
ikkuna.setColor(Color.red);'
ikkuna.drawString("Jo kolmas appletti ", 5, 40);
}
}
Tuloksena on seuraavanlainen appletti.
Edellinen appletti saatiin tagilla
<applet width="400" height="100" code="E53.class" hspace="20" vspace="20" align="middle">
<param name="font" value="TimesRoman">
<param name="size" value="40">Java appletti E53.class ei näy selaimessasi, koska selaimesi ei tue javaa!!!!
</applet>
Kokeillaa saamaa nyt tagilla
<applet width="400" height="100" code="E53.class" hspace="20" vspace="20" align="middle">
<param name="font" value="Courier">
<param name="size" value="12">Java appletti E53.class ei näy selaimessasi, koska selaimesi ei tue javaa!!!!
</applet>
Jolloin tuloksena on
Tee appletti, joka kirjoittaa yhden rivin palindromin appletti-ikkunaan. Palindromi välitetään parametrina www -sivulta. Mikäli parametria ei anneta, kirjoitetaan palindromi "Go hang a salami, I'm a lasagna hog". Vastaus
Tee appletti, joka saa parametrina www -sivulta ympyrän säteen ja kirjoittaa appletti-ikkunaan (esim säde on 3). Vastaus
Ympyrän (r=3) pinta-ala on A=28.274
(Ohje: Käytä Float.parseFloat() -metodia.)