Back to site
Since 2004, our University project has become the Internet's most widespread web hosting directory. Here we like to talk a lot about web servers, web development, networking and security services. It is, after all, our expertise. To make things better we've launched this science section with the free access to educational resources and important scientific material translated to different languages.

Java za Amigu





Java se može pokrenuti na Amigi?

Da, Java će se pokrenuti na Amigi. Trenutno postoje neka ozbiljna ograničenja, ali kako budete čitali, saznaćete da je sve što Vam je potrebno da znate kako biste pokrenuli Javu na Amigi.

Ako ste novajlija kada je u pitanju Java i ne znate mnogo o tome, možda ćete želeti da saznate nešto više o Javi. Ukratko, Java je savremeni, objektno orijentisan programski jezik koji se najčešće kompajlira u Java Byte Code kako bi se mogao interpretirati na Java Virtual Machines, koji su programi koji se pokreću na većini kompjutera.

Java može biti kompajlirana, kao i većina drugih jezika, u nativni mašinski kod kako bi program brže mogao da otpakuje. Postoje programi za neke platforme koji rade upravo to.

Iako je kompajliranje Jave u nativni kod savršeno prihvatljivo u svrhe poboljšanja performansi za određeni operativni sistem, jedna od Javinih najvećih prednosti jeste što poseduje kros-platformsku kompatibilnost: programi napisani da se pokreću na jednom operativnom sistemu će se pokrenuti na drugom nemodifikovani. To znači da ako je program napisan na Sun Solarisu on će se pokretati na Macintoshu, onaj koji je napisan na Macintoshu će se pokrenuti na Windoze mašini, onaj koji je napisan na Windoze mašini se može pokrenuti na Amigi, itd.

Osnovni cilj ovog teksta jeste da Vam pomogne da počnete sa Javom na svom Amiga kompjuteru. Molimo Vas da ga pažljivo pročitate zbog informacija o tome šta da očekujete. Java se neće svima svideti (original: Java is not going to be everybody's cup of tea - igra rečima nije slučajna, Javin logo je šoljica kafe), naročito ne trenutno na Amigi, ali ako ste ozbiljni u vezi sa Javom, ovo će Vam pomoći.

Sadrzaj
Uvod
Za tumačenje Java Byte Code potreban je CPU Power
Da li vredi potruditi se na Amigi?
Šta u vezi MOca i MERAPI?

Preuzimanje i instalacija
Preuzimanje
Instalacija
Isprobavanje

Nekoliko saveta za nove Java programere
Paketi,
Šta su paketi,
Upravljanje projektima sa paketima
CLASSPATH promenljiva okruženja

Interpretacija Java Byte Code zahteva snagu procesora


Javina neobična kros-platformska kompatibilnost se dostiže kompajliranjem Jave u Java Byte Code, kompaktni set mašinskih instrukcija koji je još uvek jedva visokog nivoa, koji mora biti izvršen (interpretiran) na Java Virtual Machine (JVM). JVM je uglavnom implementiran u formi nativnog programa (umesto da bude pravi, fizički procesor na glavnoj ploči Vašeg računara).

Opšti troškovi interpretiranja Java Byte Code zahtevaju jedva značajnu posvećenost snage procesora. Iako ovo nije tako teško kao interpretiranje BASIC programa ili ARexx skriptova, na primer, možete očekivati da običan JVM izvrši programe na 10% brzine kojom bi se pokretao nativni program.

Amiga, oslanjajući se za većinu svoje brzine na periferne I/O procese, nije obdarena snažnom brzinom snage procesora koje interpretiranje Java Byte Code zahteva kao osnovnu brzinu. Ovo predstavlja problem pokretanja Jave na Amigi.

Drugi problem za Amigu jeste činjenica da to što je JVM dostupan za nju ne ugrađuje Just In Time (JIT) kompajler, koji obavlja prevođenje Java Byte Code u nativni mašinski kod, već samo u svrhu izvršenja koda. Rezultat nije pohranjen na Vašem hard disku. JVM koji usađuje JIT kompilaciju može izvršiti Java Byte Code na 25% brzine nativnog koda. Koliko god da bi to pomoglo Amigi, trenutno ne postoji JVM kompajler sposoban za JIT.

Još jedan problem za Amigu je činjenica da Abstract Windowing Toolkit (AWT) nije dostupan za Amigu u završenoj formi.Preliminarni (i nedovršeni) AWT za Amigu, zajedno sa JVM (Kaffe 0.8.4) se može naći ovde .

Pa, čemu onda napor da se omogući da Java radi na Amigi?


To zavisi od toga koliko ste ozbiljni: Na skali od 0 do 10 (gde je 10 “zaista ozbiljan u želji da pokrenem Javu”) morate da imate barem 7 ili 8 skor. Ako samo želite da koristite Amigu da biste videli čemu ta cela zbrka oko Jave, nećete biti oduševljeni.

Neću Vas više obeshrabrivati. Postoje različite koristi od pokretanja Jave na Amigi. Bez nekog posebnog redosleda one su poređane ovde:
  • Java će biti tu, bez obzira koliko jako Microsoft pokušava da je potkopa.

  • Java je pravi objektno orijentisan jezik (da uporedimo: C++ ima objektno orijentisane sposobnosti, ali će Vam omogućiti da narušite objektno orijentisane programske tehnike: ovo nije dobra stvar, ali C++ VAS čini odgovornim za greške); Java primenjuje prave objektno orijentisane tehnike. To je dobra stvar.

  • Java može imati “povezujuću” ulogu sa drugim platformama: Java softver napisan na Amigi se može pokrenuti na drugim platformama i obrnuto. Iako je ovo još uvek veoma ograničeno uz poštovanje prema Amigi, stvari će se poboljšati vremenom.

  • Vaša uključenost zajedno sa trudom da se Java omogući na Amigi će pomoći ljudima koji rade posao: to ubrzava proces!

Iako nećete moći da uradite sa Java programima kao što biste mogli sa Graphic User Interface (GUI), moći ćete vrlo lako da napišete programe za rad na netu! Napisao sam jednostavan HTTPD (web server) u pedeset i nešto linija koda i on je radio sasvim fino na Amigi (dok se JVM nije crash-ovao, ali to je vrsta problema koji se samo uz vašu i moju pomoć može locirati, prijaviti i popraviti).

Na 35MHz 68040 Java se pokreće veoma sporo, ali još uvek prihvatljivo dobro ako ne očekujete previše. Prethodno pomenuti web server radi zapravo veoma dobro. Ako imate 50MHz 68060 možda će Vam se učiniti da je Java malo spora, ali ne tako loša. Samo ako imate 14MHz 68020 vrlo verovatno će Vam se Java učiniti kao novotarija. Nemojte da kažete da Vas nisam upozorio.

Ali ako imate snagu procesora i i dalje ste ozbiljni, onda samo napred! A šta je sa MOca i MERAPI?

Important News
Holger Kruse (famous for the superb Miami TCP/IP stack) has recently (March 1999) announced that his latest project, Daytona, will bring Java 2TM to the Amiga, including the AWT, support for JFC/Swing, etc. Daytona will work on the Amiga Classic (68K) line and take advantage of PPC boards.
The Amiga's 68K CPUs are only at the highest levels (68060) capable of emulating the Java Virtual Machine with sufficient speed, and even then performance would likely be far less than optimal. Daytona addresses this problem by implementing the AWT and standard Java classes with native code, thereby allowing the core of Java programs to operate at native speeds! Only ``user-code'' is then interpreted in the JVM.
For more information on Daytona, see the Daytona Home Page at Nordic Global.

MOca i MERAPI


MOca je JVM od Finale Development; MERAPI od Haage & Partner. Oba nude JIT podršku. Od ova dva, MERAPI bi trebalo da bude bliži završetku, ali razni problemi sa implementacijom ne dozvoljavaju da se ova dva JVM-a objave.

U svakom slučaju, dok se oni ne objave nisu ništa više od vaporvera. Malo je verovatno da će bilo koji od njih biti objavljen u ovom trenutku.

Preuzimanje i instaliranje Jave



1. Preuzimanje


Evo kako da dobijete fajlove koji su Vam neophodni:
  • Poslednja Amigina verzija Kaffe;
    Ovo je dostupno na Fred Fish (Cronus') FTP sajtu (ftp.ninemoons.com/pub/geekgadgets/amiga/m68k/snapshots/current/amiga-bin)...stotine fajlova će biti izlistani (svake sekunde fajl ili nešto slično ima .pi ekstenziju, što je Product-info fajl koji opisuje sadržaj).

    Možda ćete takođe (ili umesto starijeg Kaffea) želeti da pogledate Preliminarni (i nedovršeni) AWT zajedno sa JVM (Kaffe 0.8.4) za Amigu

  • Bez obzira koji izbor napravite, takođe će Vam trebati Sun class biblioteka;
    Ovaj fajl će se nalaziti odmah pre ili posle “kaffe..” fajla na Fred Fish (Cronus') FTP sajtu (pogledajte tačku dole). Class biblioteka sadrži sve standardne Java klase. Bez nje ćete uspeti da uradite baš ništa.

  • Gunzip i tar programi da biste vratili fajlove iz arhive. Ovi alati su takođe dostupni u istom direktorijumu na Fredovom sajtu (možda već imate ove na Amigi)

  • Najmanje verzija 46.0 ixemul i ixnet biblioteka. Ja imam v46.1 verziju oba ova iz ixemul... arhive, takođe odatle.

2. Instaliranje


Napravite sebi lep razvojni dokument za svoje Java stvari. Ja sam odabrao WORK:Java/ i trajno mu dodelio ime logičke zapremine: Java. Ako ne znate da radite ovo, onda nemojte ništa od ovoga da pokušavate sami. Izvinjavam se.

	md WORK:Java
	assign Java: WORK:Java
	cd Java:
	tar -xf kaffe-0.7.1-bin.tar
	lha -x kaffe-0.7.1-sun-bin.lha


Sada morate da postavite CLASSPATH varijablu okruženja kako bi Vaš (i drugi) Java softver našli sve druge klase koje su instalirane a koje mora da pokrene. Ako koristite Javu: dodelite kao što sam ja i onda možete da ukucate ovo:

	copy console: env:CLASSPATH
	Java:share/kaffe/classes.zip;.


i da pritisnete ^\ (ctrl-\ i.e.EOF signal); primetite da nakon “...classes.zip” ne postoji tačka-zarez koju prati tačka. Tačka-zarez je separator između više puteva (ili .zip ili .jar fajlova), a tačka predstavlja trenutni direktorijum. Ovaj trenutni direktorijum je važan, jer ne biste mogli da izvršite klase, a da ih ne stavite u direktorijum gde su vidljive (trenutni direktorijum nije vidljiv, to je ono što tačka radi).

Takođe sam napravio dva svoja pseudonima na svom s:Shell-Startup i dodao Java:bin direktorijum na svoje puteve (možete da uradite ovo u s:Shell-Startup ili na svom s:startup-sequence pre nego što LoadWB napravi dodatak system wide). Proverite velika i mala slova na sun.tools.javac.Main - Java je osetljiva na to!

	alias javac "Java:bin/kaffe sun.tools.javac.Main []"
	alias java "Java:bin/kaffe []"


To je to! Sada možete da ukucate

	javac FunTest.java


da biste kompajlovali FunTest klasu u FunTest.java fajltu (pogledajte dole). Opet, obratite pažnju na to da su imena klasa osetljiva na velika i mala slova i moraju (tačno) odgovarati fajlu za koji su definisana. Iako se ovo čini napornim, C/C++ programeri su upoznati sa takvim zahtevima i nakon nekog vremena videćete da ovo podstiče pažljivije imenovanje i čini upravljanje mnogim paketima i fajlovima klasa lakše i pouzdanije.

Da biste pokrenuli svoju kompajliranu klasu, kucajte:

	java FunTest

Ok, prsti me već bole i nadam se da ovo radi. . .


Evo jednog malecnog (i banalnog) programa samo da vidite da li ste sve uradili kako valja. Nakon što ga isprobate, idite i kupite sebi dobru knjigu o Javi! Rado Vam preporučujem sledeću: Just Java, drugo izdanje,Petera van der Lindena ; The Sunsoft Press, Java Series. Autor ima dobar smisao za humor i svestan je činjenice da Microsoft pokušava da zezne Javinu inicijativu. Dobra knjiga, dobar uvod u većinu aspekata Jave. 550 stranica.

Pohrantie sledeće u fajl nazvan FunTest.java; primer nakon pseudonima iznad će Vam pomoći da kompajlirate i pokrenete ovaj fajl:

public class FunTest
{
    public static void main( String argv[] )
    {
      if( argv.length == 0 )
        {
          for( int i=0; i<argv.length; i++ )
            {
              System.out.println( "Argument #" + i + " = '" + argv[i] + "'" );
            }
            System.out.println( "Hey, wasn't that fun?" );
        }
      else
        {
          System.out.println( "How about giving me a few command line " +
                              "arguments to print?" );
        }
    }
}


Ako imate bilo šta manje od brzog 68030 ili 68040 na svojoj Amigi, verovatno ćete biti razočarani performansama. Kompilacija je prespora (sam kompajler je interpretiran Java program!) i izvršenje je, naravno, postignuto interpretacijom byte koda.

Bitna stvar je: Vaša Amiga može da pokrene Javu. Još uvek nema kvalitet produkcije JVM-a. Ali za sad, naučićete Javu sa tim što imate: besplatnim JVM za svoju Amigu: Kaffe!

Takođe pogledajte ADE-Java listu mejlova sa najčešće postavljenim pitanjima!


Nekoliko saveta novim Java programerima



Naučite kako da koristite Pakete


Znam koliko je primamljivo da odmah uskočite, ukucate stari Hello World program u fajl i potom da ga kompajlirate i pokrenete. Odatle, vaša sposobnost da upravljate desetinama klasa će brzo nestati dok se jednog dana ne probudite i ne kažete sebi: Trebalo je da učinim nešto s tim haosom pre mnogo vremena...

Šta su paketi?

Primetićete da postoje neke klase kao što je Hashtable ili Vector koje su zapravo nazvane java.util.Hashtable i java.util.Vector. Ne možete samo da izostavite java.util kada pravite reference na ove klase ako ne omogućite to u izjavi o unosu, kao što je import.java.util.Hashtable ili opštiju formu java.util.*, koja uključuje sve iz java.util paketa.

Da li ste primetili da sam upravo rekao “java.util paketa”?

To je zato što je Hashtable klasa određena da bude deo java.util paketa. Ako ste želeli da napravite zasebnu klasu, trebalo bi da se odlučite za dobro ime za paket i da ukažete na to da je Vaša klasa deo paketa. Hajde da Vam pokažem kako:

	package com.ringlord.util;
	//
	import com.ringlord.3d.*;
	import com.ringlord.net.*;
	//
	import java.util.Hashtable;
	import java.net.ServerSocket;
	//
	public class TheWebIn3D extends Frame
		implements ActionListener,ItemListener;
	{
	  public static void main( String args[] )
	  {
	    //your code goes here :)
	  }
	}


Pogledajmo prvu liniju. Domen ime moje kompanije je ringlord.com, tako da ima smisla da koristite reprezentaciju ovoga “unazad”, na primer com.ringlord kao osnovno ime za sve moje pakete. Tako moji paketi neće praviti problem Vašima i obratno.

Veoma loš izbor za ime Vašeg paketa bi bilo Vaše ime ili samo my.util. Ideja je da možda završite deleći svoje pakete pomoću aplikacije gde se Vaša imena podudaraju sa tuđima. Rezultat je da stvari vrlo verovatno neće raditi. Zaista bi trebalo da izbegnete ovakve konflikte. Verujte mi na reč!

Još jedna stvar koju bi trebalo da izbegavate jeste imenovanje fajlova bilo čim što počinje sa java. ili javax. ili sun. itd. Ova imena su već uzeta i rezervisana. Nemojte se kačiti s njima!

Dakle, dobro bazično ime paketa će Vam dugo trajati i formiraće baze za sav Vaš softver. Ako ikad podelite paket ili ga budete koristili samo privatno, odgovarajuća organizacija će se pokazati veoma dobrom na kraju!

Budući da većina nas nema nužno svoje registrovano ime domena, postoji dobar način da nazovete svoj paket a da to ne završi konfliktima: koristite svoje ime i prezime, ukoliko je moguće s još nekim dodacima. Ako se zovete Alan Turing, mogli biste da stavite org.turing.alan kao bazično ime paketa i da napravite bilo koji set imena paketa pod tim setom, kao što je org.turing.alan.machine ili org. turing.alan.test.

Jeste li još uvek tu? Dobro!

Ako mislite kao ja, verovatno ste lupali glavu i nadali se da ovo nije neophodno. Ne, nije neophodno, ali će napraviti stvari lakšima na duge staze! Verujte mi, tačno je. Ako mi ne verujete, probajte na svoju ruku da pokrenete bilo šta više od trivijalnih stvari i zažalićete što niste koristili pakete.

Kada ste stavili nešto kao što je paket org.turing.alan.machine na vrh vaše grafičke demonstracije Turing Machine, možete jednostavo i lako da napravite referencu na ovu klasu iz bilo koje druge, bez obzira na strukture direktorijuma, trenutnog radnog direktorijuma itd. dok god je direktorijum u classpath tako gde ime paketa (npr. org) počinje.

Vi pravite referencu na klasu u ovom paketu sa izjavom u unosu. Da, nekolicina njih postoji u gornjem primeru. Neki od njih se završavaju .* a neki imaju normalno ime. Poslednji deo je uvek ime klase, kao što je TuringMachineDemo (sa izostavljenom ekstenzijom .class); ako izjava o nosu ima * na kraju, onda uključujete sve klase iz imenovanog paketa, ne samo specifične. Ovo je zgodno, ali će malo usporiti kompajler i takođe mu fali specifičnosti što je često korisno za vreme debug faze

Kako da upravljate projektom sa paketima?


Hajde da nastavimo sa dosadnim primerom o Turing Machine, i hajde da postavimo sledeću strukturu direktorijuma:
	WORK:java/
	          org/
	              turing/
	                     alan/
	                          machine/
	                          test/
	                          demo/


Ako je WORK:java dostupna u classpath okruženju, onda ova struktura direktorijuma predstavlja (na većini kompjuterskih sistema uključujući i Amigu) sledeće pakete:
	org
	org.turing

	org.turing.alan
	org.turing.alan.machine
	org.turing.alan.machine.util
	org.turing.alan.machine.net
	org.turing.alan.machine.io
	org.turing.alan.test
	org.turing.alan.demo


Prva dva su samo slučajan rezultat strukture direktorijuma i trebalo bi da budu ignorisani jer su nedovršeni. Treći je minimalno ime paketa, a ostatak su subpaketi koji predstavljaju Vaš lični stil organizacije. Možete da napravite subpakete unutar njih, koliko god daleko želite da idete ili koliko god daleko da je to neophodno.

Sada napravite svoju klasu Turing Machine kao deo org.turing.alan.machine paketa. Fajl će biti pohranjen u direktorijumu WORK:java/org/turing/alan/machine/ i definisaće se kao deo tog određenog paketa sa izjavom na vrhu: paket org.turing.alan.machine;

	javac  -d WORK:java  TMComputer.java


Da biste kompajlovali ovu klasu, kada se nađete u direktorijumu source file ukucajte ovu komandu: Pretpostavljajući, naravno, da imate fajl WORK:java/org/turing/alan/machine/TMComputer.java koji javac kompajler može da kompajlira. Ali šta je -d java?

Ovo govori kompajleru da izlazni fajl (.class) treba da bude pohranjen tako da koren paketa počinje direktorijumom WORK:java. Ovo se dešava istovremeno sa unosom classpath varijable okruženja i to sa dobrim razlogom!

Ako izostavite argument direktorijuma, kompajler neće znati gde je souorce file. Sun-ovi najnoviji kompajleri samo odbace .class u trenutni direktorijum, što je obično tačno, ali starije verzije, uključujući one koje su dostupne za Amigu će pretpostaviti da je trenutni direktorijum koren paketa i napraviti put za paket “downward” odakle ga kompajlujete. Potom ćete završiti sa beskorisnim i konfuznim setom direktorijuma ispod onog trenutnog.

Najlakši način da se nosite s ovim jeste da napravite sebi mali skript da kompajluje klase za vas i onda nećete morati više da brinete gde tačno koren paketa počinje.

Šta Vam ovo zapravo kupuje?
  1. Možete da pokrenete Turing Machine Computer klasu odakle god, pokrećući je jednostavno preko java.org.turing.alan.machine.TMComputer

  2. Vaši različiti projekti će biti uredno odvojeni jedan od drugog i nećete se uvaliti u nevolju kada budete hteli da podelite neki od svojih projekata; takođe nećete morati da brinete za svoj trenutni radni direktorijum kada pokrećete programe: vaše klase znaju gde se mogu naći.

  3. Videćete da radite neke stvari iznova, možda na malo drugačiji način, praveći sladak mali utility paket od takvih stvari moći ćete da delite svoje pakete. Nikad više nećete morati da kopirate source fajlove sa jednog direktorijuma projekta i potom da prolazite kroz glavobolje ponovnog kombinovanja različitih baza kodova!

Nadam se da je ovo gore lako za praćenje, da ste ubeđeni u korisnost paketa i da ćete ih dobro koristiti dok istražujete svet Jave!

CLASSPATH


Postoje razlozi za i protiv korišćenja CLASSPATH varijable okruženja. Pristalice će reći da dodavanje paketa i JAR i ZIP fajlovi unutar CLASSPATH ga čine lakšim. Problem je održavanje i performanse: ako imate stotine različitih Java paketa instaliranih, Vaš CLASSPATH neće samo postati beskoristan već će takođe sadržati reference za direktorijume paketa i fajlove koji Vam nisu potrebni većinu vremena.

Uzmimo u obzir da ćete se verovatno uskoro umoriti od kucanja java mystuff.test.FunTest, te ćete verovatno morati da napravite sebi skript da bi izvršavao ovu komandu. Najlakša stvar jeste da modifikujete takav skript da uključuje -classpath listu argumenata svih paketa koje ovaj određeni program treba, i samo te pakete.

Korisno je da napravite referencu u CLASSPATH samo za pakete koji su deo standardne Java instalacije. Ovo bi bili classes.zip fajlovi koji sadrže java.* pakete kao i swingall.jar fajl koji predstavlja javax.swing.* pakete Java Foundation Classes. Sve reference na pakete specifične za Vaš program bi trebalo da budu referisane u omotaču skripta:

	java -classpath ${CLASSPATH};Java:Swing/swingall.jar
		mystuff.test.FunTest







Published (Last edited): 22-09-2012 , source: http://www.ringlord.com/people/walrus/amiga/java.html