You are on page 1of 31

JAVA NEDR Java kelimesini son zamanlarda ok sk duyuyorsanz ve ne olduunu merak ediyorsanz bu sayfa tam size gre.

nk bu sayfada Java 'nn ne olduunu anlatyorum.

Uzun bir cmle ile


JAVA Sadece interneti deil tm bilgisayar dnyasn deiime uratacak SUN firmasnn gelitirdii yeni platform bamsz programlama dili Hindistan'da bir ada Ana ihracat rn kahve olan Pazifik'te bir ada bu yzden USA'da kahve iin kullanlan argo kelime dir. 6*2 madde ile JAVA 1. Basit & Kk Java programlama dilinin renilmesinin kolay olduunu iddia eden Sun'daki gelitiricilere, yeni programlamaya balayanlarn inanmas biraz g olacaktr. Programlamay bilen kiiler iin (zelliklede C++) ok daha kolaydr. nk Java C++ 'a ok benzer. C++ 'da karmak olan baz eyler atlm, basit olanlar eklenmi Kk : Java ok kk ilemcilerde bile alabilir. Temel ihtiyac ( lemci, standart snflar ve "Thread"-destei ) 215 KB dr. (Sun 'n iddias ) 2. Nesneye ynelimli & Dank Nesneye ynelimli mi ? O da ne? Nesne ynelimli (Object Oriented) , insanlarn kavramada ok zorluk ektikleri bir kavram. Ama bu, iyi zelliklerinden dolay, yazlm gelitirmede kabul grmesini engelleyemiyor. Adndan da anlald gibi, nesneye ynelimli programlamada insan nesne gelitirmeye konsantre oluyor. Nesne, verilerden ( deikenler ) ve bu verileri deitirmeye yarayan fonksiyonlardan ( Method ) oluuyor. Nesneye ynelimli programlamada, sonradan kullanlabilecek genel nesneler (Object) oluturulmas idealdir (Snflar). Profesyonel programlamada, devaml byyen havuzda bulunan nesnelere ulalarak, bu nesneler tekrar kullanlabilir (Snf ktphaneleri). Standart snf ktphaneleri (Giri/k, Grafik vb.) oluturulmutur. Bunlar programlarn iine katlrlar. Uzaktaki bir sistemde bulunan nesnelere Java programlar Internet zerinden kolayca ulaabilirler.Sun firmasnn vizyonu : Programlarn tamamnn lokal bilgisayarda bulunmamas, gerekli paracklarna ihtiya halinde internet zerinden eriilmesi. Sun firmasnn bu vizyonunun gerek olup olmayacan greceiz... 3. Yorumlaycl & Hzl Java programlar direkt ilemci tarafndan yorumlanmaz. zel bir program tarafndan yorumlanrlar (Yorumlayc = Interpreter ). Bunun avantaj ve dezavantajlar vardr : Program gelitirirken baz admlardan kurtulursunuz. rnein baz program paracklarna balant kurmaktan (Link). Dezavantaj ise tm desteklemelere ramen, programn almasnn yava oluu. Sun firmas bir ara katman oluturdu. Java bir nyorumlayc tarafndan byte koduna (bytecode) evrilir. ok byk avantaj olan, baz kk deitirmelerde derleyemeye gerek kalmamas, bununla yok oluyor. Fakat bu "bytecode" makina diline ok yakndr. Bundan dolaydr ki ok hzl bir kod oluturulmu oluyor. Bu arada "Just-in-Time" Compiler lar "bytecode" u gerek makina koduna eviriyorlar. Bylece hz 10 kat (hatta daha fazla) artyor. Sun firmasnn gelitirecei zel "Java ilemcileri" kapda. Bunlar Java programlar direkt altracaklar. 4. Salam & Gvenilir Derleyici (Compiler) ve yorumlayc (Interpreter) kombinasyonun baka bir ynden avantajlar var. n derleyici tip (ve buna benzer) hatalar kontrol ederken, yorumlayc hatalar yakalar ve gereini yapar. En kt ihtimalle, derlenmi bir program ker. Yorumlayc, yabanc verilere ulalmasn engeller. C++ 'taki bu zellik kaldrm. Gerekten Java gvenli bir programlama dili ( Hi bir ey %100 gvenli deildir. Gnmzde kredi kart katl yaplmasna ramen halen insanlar hal kredi kartlarn internet zerinden kullanyorlar. Niye Java %100 gvenilir olsun ki ....)

5. Platform bamsz & Tanabilir Burada program gelitiricilerinin bir ryas gerekleiyor:Herkes farkl ilemcilerde ve iletim sistemlerindeki problemi bilir. Birisinde alr dierinde almaz ve bu gelitiricilerin kabusudur ( Dnn ki 10 tane video sistemi var ). Derleyici burada devreye girer ve program "bytecode" evirir. Bu kod tamamen platform bamszdr ve tm ilemcilerde alr Bir Java program, hibir deiiklik yaplmadan, desteklenen tm sistemlerde alr. Ayrca C++ 'da baz belirsizlik arz eden tanmlar temizlenmi. Bu tanmlar deiik sistem ve derleyicilerde, deiik biimlerde kabul ediliyorlard. rnein C++ 'da hibir zaman bir tamsaynn (integer) ka byte olduu bilinemiyordu. Java'da bir tamsay herzaman (Hangi sistemde olursa olsun ) 4 Byte dr. 6. Multithread & Dinamik Modern bir programda bir ok ilem ayn zamanda olur. Bu zellie "multithread" deniyor (Buna uygun bir trke kelime bulamadm). Java bu tr programlar gelitirenlere, zel fonksiyonlar sunuyor ki, gelitiriciler programn asl amacna konsantre olsunlar. Baz dzenlemelerden dolay Java, C++ 'dan daha dinamiktir. Snflar (Class) ve Nesneler (Object) arasndaki ilikiler kat bir kural ile bal deildirler. leriki safhalarda deitirilmesi ok basittir. ( Bu da yorumlayc sayesindedir) Java ile neler yaplr ? Tek kelime ile Herey Saysz madde ile Animasyonlar, kayan yazlar, web sayfalrnda chat, hesap makinesi, oyunlar, ifreleme programlar, interaktif web sayfalar, mzik, kelime ilemci, kk internet appletleri, kocaman paket programlar, resim ileme programlar, tecme programlar, sipari sistemleri, saatler, yazm kontrol programlar... vb. (rnekler oaltlabilir) Gerekten Java bir programlama dili. Yukardaki tm zellikler kullanlrsa, Sun 'da hz olayn zerse ( ki zecek gibi gzkyor ) her program java ile yazmamak iin bir neden kalmyor. Tabii ki ncellikle internet ve WWW bundan nasibini ald. Birok web sayfasnda Java appletlerini grebilirsiniz. ncellikle gze ho gelen oyunlar ( Animasyon, kayan yazlar gibi), daha yararl eyler ise yava yava oluuyor ( Chat, daha iyi kullanc arayzleri, ev bankacl gibi) Java ile neler yaplamaz ? Ufak bir cmle ile Kahve piirilmez.

Programcnn ihtiyalar Editr Java programlar veya appletleri yazmak iin editre ihtiya vardr. Henz severek kullandnz bir editr bulamdysanz buraya bir gzatn. Windows 95/98/NT EMacs : Bu editr yazdnz koddaki kelimeleri cinsine gre renklendiriyor. Ayrca stun atlamalarn dzenli bir ekilde yaptndan bloklarnz sizin ayarlamanza gerek kalmyor. Renklerdirme ve zel stun atlama zellikleri ile kodun okunabilirliini kolaylatryor. Editre ait bir paketle, java kodlarnz editrn iindeki menler yardm ile derleyebiliyorsunuz. Ayn zamanda Unix'de de alyor. stelik bedava. UltraEdit : 45 gnlk deneme sresi olan bir shareware program. Unix GNU Emacs : Bu editr yazdnz koddaki kelimeleri cinsine gre renklendiriyor. Ayrca stun atlamalarn dzenli bir ekilde yaptndan bloklarnz sizin ayarlamanza gerek kalmyor. Renklerdirme ve zel stun atlama zellikleri ile kodun okunabilirliini kolaylatryor. Editre ait bir paketle, java kodlarnz editrn iindeki menler yardm ile derleyebiliyorsunuz. Ayn zamanda Windows paltformlarnda da alyor ( Yukarya baknz ). Xemacs : Bu editr GNU Emacs 'in bir varyasyonu. Daha iyi X destei olduu syleniyor ( Bazlar tarafndan ). MacOS BBEdit : ok popler olan bu ticari editr, Java ve HTML desteinin yannda dah bir ok programlama dilinide destekliyor. SpotCheck : Sadece Java'y destekleyen ticari bir editr. JDK ( Java Development Kit ) Herkesin java programlar gelitirmesine olanak tanmak (bylece daha abuk yaygnlamasn salamak ) iin SUN temel ihtiyalar ieren bir paket kard : JDK ( Java Development Kit ) Bu pakette herey var. Derleyici ( Compiler ), Yorumlayc ( Sanal makina ), Snf ktphaneleri ( API 'ler ), dkmantasyon ( HTML formatnda ) ve bir sr demo. Bedava olan bu paket grsel deildir, komut satr programdr. Grsel olan Java gelitirme ortamlar vardr, lakin bunlar ticaridir, dolaysyla paraldr. Bunlarn ouda SUN'n gelitirdii JDK paketinin makinada kurulu olmasn isterler. Grsel gelitirme ortamlar hakknda daha fazla bilgi iin Java Gelitirme Ortamlar blmne baknz. Gelelim JDK'nn srmlerine : SPARC/Solaris ve X86/Solaris JDK 1.02 JDK 1.1.7 JDK 1.2 ( imdi "Java 2" diye anlyor. ) Windows 95/98/NT JDK 1.02 JDK 1.1.8 JDK 1.2 ( imdi "Java 2" diye anlyor. ) MacOS JDK 1.02 ( Minumum MacOS 7.5.3 ve 25 MHz bir makinaya ihtiya duyuyor. ) Dier iletim sistemleri ( En gncel liste SUN tarafndan salanyor. ) Dkman & Kitap yi bir dkmantasyon tabii ki kanlmaz. JDK paketinde tabii ki bir dkmantasyon var, ama ne yazk ki ingilizce. Nette bulunan dkmanlar "Linkler" blmnden, Java kitaplarn ise "Kitaplar" blmnde bulabilirsiniz. Java Gelitirme Ortamlar Doru drst bir java program yazmak iin JDK yeterli deil. Eksik olan konforlu bir zel editr, debugger ( hata ayklaycs ) ve GUI-Builder. Borland yllar nce, bir program gelitirilmesi iin gerekli olan hereyi ieren IDE ( Integrated Development Environment ) diye anlan entegre edilmi gelitirme ortamn karmt. Java programclar iin de byle bir gelitirme ortamna ihtiya vardr ve bu ii ok daha kolaylatrr. Mevcut Java Gelitirme ortamlarn grmek iin buraya tklaynz.

Bir applet hazrladnzda bunu bir HTML dkmanna yerletirmelisiniz. HTML 3.2 ile birlikte, Java appletlerin kullanlmasn salayan iki yeni eleman kt. Bunlar APPLET ve PARAM. Dier HTML elemanlar gibi bu iki elemannda birok zellikleri mevcuttur. Fakat ideali sadece gerekli olan zelliklerin kullanlmasdr. APPLET Elemannn kullanlmas APPLET eleman, HTML dkmanna yerletirdiiniz appletin tanmlanmasn ve zelliklerinin tanmlanmasn salar. Her HTML eleman gibi, APPLET elemannn da bir balang tag <APPLET> ve biti tag </APPLET> vardr. APPLET eleman iin gerekli olan zellikler: CODE, WIDTH ve HEIGHT dr. CODE zellii kullanlacak appleti, WIDTH zellii appletin geniliini (Pixel), HEIGHT zellii ise appletin yksekliini (Pixel) belirlemenizi salar. Aada gerekli olan zellikleri ile bir appletin HTML dkmanna balanm eklini gryorsunuz. <HTML> <HEAD> <TITLE> MetSar n Java Sayfas </TITLE> </HEAD> <BODY> <APPLET CODE=metsar.class WIDTH=300 HEIGHT=100> </APPLET> </BODY> </HTML> Yukardaki rnekte HTML dkman ve metsar.class adl java appleti ayn dizinde bulunmaldrlar. ayet java appleti farkl bir dizinde ise opsiyonel CODEBASE zelliini kullanmanz gerekir. CODEBASE zellii, appletin bulunduu URL yi belirtmenizi salar. Aadaki rnek, yukardaki rnein hemen hemen aynsdr. Tek fark java appleti baka bir dizinde bulunduu varsaylarak CODEBASE zellii kullanlmtr. <HTML> <HEAD> <TITLE> MetSar n Java Sayfas </TITLE> </HEAD> <BODY> <APPLET CODE=metsar.class CODEBASE="http://www.javasayfasi.net/java/classlar/" WIDTH=300 HEIGHT=100> </APPLET> </BODY> </HTML> Dier opsiyonel zellikleri yle sralayabiliriz. ALIGN : Appletin konumunu belirlemizi salar. Alabilecei deerler ABSBOTTOM, ABSMIDDLE, BASELINE, BOTTOM, CENTER, LEFT, MIDDLE, RIGHT, TEXTTOP, TOP dur. HSPACE: Appletin altnda ve stnde ne kadar boluk brakabileceinizi belirleyebilirsiniz. HSPACE e vereceiniz deer Pixel olarak ilenir. rnek : HSPACE=10 VSPACE: Appletin sanda ve solunda ne kadar boluk brakabileceinizi belirleyebilirsiniz. VSPACE e vereceiniz deer Pixel olarak ilenir. rnek : VSPACE=20 ALT: Appletleri gsteremeyen browser larda, appletin yerine alternatif bir yaz kmasn salayabilirsiniz. NAME: Applete bir isim vermenizi salar. PARAM Elemannn kullanlmas PARAM eleman ile applete parametre gnderebilirsiniz. PARAM elemannn sadece balang tag vardr. <PARAM>. Applete gndermek istediiniz her parametre iin bir <PARAM> tag kullanmalsnz. PARAM taglarn balang tag <APPLET> ile biti tag </APPLET> arasna yerletirmelisiniz. Appletler <PARAM> tagnda belirtilen parametrelere getparameter() metodu ile ularlar. <PARAM> tagnn gerekli iki tane zellii vardr. NAME ve VALUE. NAME zellii ile parametrenin ad belirtilir ki getparameter metodu ile bu isme gre aranr. VALUE zellii ise parametrenin deerini verir. Aada, applete kullanlacak resmi parametre ile girilen bir HTML dkman rnei verilmitir. <HTML> <HEAD> <TITLE> MetSar n Java Sayfas </TITLE>

</HEAD> <BODY> <APPLET CODE=metsar.class WIDTH=300 HEIGHT=100> <PARAM NAME=Resim VALUE=logo.gif > </APPLET> </BODY> </HTML> Java appletinde, resim parametresinin deeri aadaki komut ile okunur. Resim_logo=getparameter(Resim); Veri Tipleri Literaller Deikenler Aklamalar Operatrler Ayrlm Kelimeler Karlatrmalar Dngler Diziler Veri Tipleri Java'da herey bir nesnedir. Tek istisna veri tipleri. Java veri tipleri btn platformlarda standart bykle sahiptir. Bu satndart Java 'nn tanabilirliini salyor. Aada Java 'da bulunan veri tipleri ve byklkleri listelenmitir. Veri tipi Byklk byte 8-bit short 16-bit int 32-bit long 64-bit float 32-bit kayan nokta double 64-bit kayan nokta char 16-bit Unicode

Eer C/C++ programcs iseniz "unsigned" tipinin olmad dikkatinizi ekmitir. Byte tipi ise C/C++ daki "char" tipinin yerini almtr. Java'daki char tipi 16 bittir. nk Java karakter verisinde Unicode karakter setini temel alr. Unicode uluslararas karakterleri destekleyen bir standarttr. Programlarnzn deiik platformlarda ve lkelerde altrlacanda Unicode ok uygundur. Yukardaki tabloda olmayan dier bir veri tipi ise boolean dr. Bir boolean deiken numerik deer evrilemez ve sadece iki deer alabilir. Bu deerler "true" ve "false" dur. Literaller Literaller, deikenlere deer atamak iin kullanlr. Integer 'lara C/C++ benzer biimde deer atanr. 25 gibi tamsay atayabilirsiniz. Hexadecimal bir tamsay atamak iin, saynn nne "0x" ifadesi koymanz gerekir. rnein 15 saysn hexadecimal olarak 0xF eklinde atamalsnz. 8 'lik tabanda bir say atamak iin "0" ifadesini saynn nne koymalsnz. Kayan noktal saylar ise direkt 5.2345 eklinde atayabilirsiniz. Bunlar 32 bit float veya 64 bit double olarak saklanabilirler. Belirtmez iseniz varsaylan 64 bit double dr. Belirtmek iin yapacanz tek ey saynn arkasna float iin F, double iin D koymaktr. rnein 5.323 F veya 5.323 D. Karakterler, tek trnak iinde atanrlar. rnein 'a' gibi. Escape karakterleri iin slash (\) kullanlr. Bunlarda trnak iinde belirtilir. \t=tab, \n=satr atlama gibi Stringler iin ift trnak kullanlr. "MetSar'n Java Sayfas" gibi. Satr atlamas yapmak istiyorsanz "MetSar'n Java Sayfas \n" Deikenler Java' da tip deiken vardr : instance,class ve local. ilk iki tipe ileriki blmlerde deinilecektir. Lokal deikenler metodlarn ve bloklarn iinde tanmlanabilirler. Blok, { ile balayan ve } ile biten ifadeler topluluudur. Blok iinde tanmlanan lokal deikenler, blok sonuna kadar geerlidir. Genel format u ekildedir : <tip> <deiken ad> rnein double tipinde pi adl deikeni tanmlayalm.

double pi; Deerde atayabilirdik: double pi=3.1415; Deikenler, harf, say, dolar iareti, alt izgi ile balayp bu karakterlerle devam edebilir. Ama komutlar, operatrler deiken ismi olarak kullanlamazlar. Aklamalar Programlarnza aklama koymak iin Java da kullanacbileceiniz iki stil vardr. Birincisi ift slash ( // ) . ift slash tan satr sonuna kadar olan ksmda bulunan herey aklama olarak kabul edilir. kincisi ise slash ve yldz ( /*) ile balar yldz ve slash ile biter. Bunlar arasndaki herey aklama olarak kabul edilir. rnek 1 : double pi; // pi deikeni double olarak tanmland. rnek 1 : /* Bu programn amac saysal loto tahmini yapmaktr. Operatrler Java'da bulunan operatrler aadaki tabloda verilmitir. Kategori Operatr Aritmetik +-*/% likisel < > >= <= == != && || Bit ilemeri & | ^ << >> >>> ~ &= |= ^= Artrma ++ Azaltma -Aada iki deiken tanmlanp, bunlara deer atanyor. Daha sonra ise bu iki deikenin ierii toplanyor. int x,y ; x= 3 ; y=4 ; int z=x+y ; Z 'nin deeri yedidir. Operatrlerin ncelik sras aadaki tabloda gsterilmitir. [] () ++ - ! ~ */% +<< >> >>> < > <= >= == != &^ | && || = ve dierleri Bit ilemleri Ayrlm Kelimeler Aadaki tabloda Java 'nn komutlar olarak kullanlan kelimeler listelenmitir. Bu kelimeler Java iin ayrlmtr. Yani bu kelimeleri deiken ismi gibi eyler iin kullanamazsnz. Bunlar snf tanmlamas, deiken tipi belirleme, koul, dng gibi ilemler iin kullanlr. Abstract break byvalue catch class continue do else false finally for boolean byte case char const default double extends final float goto

if import int long new package protected return static switch this throw true void

implements instanceof interface native null private public short super synchronized threadsafe transient try while

Karlatrmalar Karlatrmalar , genelde bir karlatrmann sounucuna gre belirtilen komut veya komutlar altrrlar. Eer birden fazla komut kullanlacak ise blok iinde olmaldr. Tek bir komut iin buna gerek yoktur. rnein; a deikenin deerinin bir olup olmadn kontrol ediyoruz. Eer a=1 ise a=2 deil ise a=1 Grld zere karlatrma boolean bir deer dndrmelidir. Yani true(doru) veya false(yanl) deerini dndrmelidir ki bu deere gre ilenecek komutlar belirlenebilsin. Java'da karlatrma yapmak iin "if...else..." kullanlr. Format u ekildedir: if (karlatrma) { karlatrmann sonucu doru ise ilencek komutlar } else { karlatrmann sonucu yanl ise ilencek komutlar } Yukardaki rnei java formatnda yazarsak : if (a==1) // Java'da = operatr atama iin kullanlr. // Karlatrma iin == operatrn kullanlr. a=2; else a=1; // Tek komut olduu iin blok iine alnmasna gerek yoktur. Eer birok karlatrma var ise i ie karlatrmalar (if ) kullanlabilir. Sonucu nmerik olan karlatrmalar iin "switch...case..." komutu kullanlr. Bu komut sadece nmerik deerler iin kullanlr. Format u ekildedir: switch (deiken) { case 1: // deikenin deeri 1 ise break; case 2:{ // deikenin deeri 2 ise break; } default: // yukardaki deerler haricindeki deer ise break; } Dngler Java 'da tane dng ilemi vardr. "for" dngsnn yaps aadaki ekildedir. for (ilk deer; test; deer artrma/azaltma)

Bu yapda grlen ilk deer ifadesi, deikeninizin alaca ilk deerdir. Test ifadesinde ise basit veya kompleks bir karlatrma kullanabilrisiniz. Deer artma veya azaltma ise deikeninizin on anki deerini deitirecek bir ifadedir. "for" dngsnb rnek kullanm : for (sayac=0;sayac<3;sayac++) Bu rnekte sayac deikenine ilk deer olarak sfr verilmi ve her dngde bir artrlmas istenmi. Dngden kma koulu ise sayac deikeninin 3 ve daha yukar deerleri olarak belirlenmi. Bu durumda sayac deikeni 0,1,2 deerleri iin dngye girecektir. "for" dngsnden sonra bir komut veya blok komutlar gelebilir. "while" dngsnn yaps u ekildedir: while (test) Test ifadesi "for" dngsndeki ile edeerdir. rnek: sayac=0; while (sayac<3) { //komutlar sayac++; } "do" dngsnn yaps: do { //komutlar } while (test); "do" dngsnn "while" dngsnden fark en az bir kere dngye girmesidir. Tm dnglerde "break" komutu dngden klmasn, "continue" komutu ise bir sonraki deere gemeyi salar. Diziler Java'da diziler nesnedirler, C'deki gibi hafzada yer kaplayan pointer deillerdir. Java 'da dizler C 'ye gre daha gvenilirdir. Dizilerin elemanlarna geliigzel deerler atayamazsnz. Java, dizi elemanlarn srasyla kontrol eder. Dolaysyla arada deer atanmam bir elemana rastlanrsa hata oluur. Buda C'de kan hafza bozulmalarn nler. Java'da dizi kullanmak iin ilk nce dizinin tipi verilir. Tip verilirken dizinin bykl belirtilmez. int numbers[]; // Integer diziler iin String myStrings[]; // String diziler iin Dier metod ise tipin arkasna keli parantez koymaktr. String[] myStrings; // String diziler iin kiside tanmlamada ayndr. Her ikiside kullanlabilir. Size hangisi daha kolay geliyorsa onu kullann... Java dizileri rneklerden de grld zere tm veri tipleri iin kullanlabilir. Sonraki adm ise dizinin "new" operatr kullanlarak yaratlmasnda, bu admda dizinin bykl de belirtilir. int numbers[] = new int[5]; // 5 byklnde integer dizi String myStrings[] = new String[20]; // 20 byklnde string dizi Bu admdan sonra diziler yaratlm oldu. Dizinin her bir elemanna varsaylan deer atanr. Varsaylan deerler integer veri tipi iin "0 (sfr)", string veri tipi iin "null" deeridir. Dizi elemanlarna bu admdan sonra deer atamak ok kolaydr. C++ 'da olduu gibi Java 'da da dizilerin elemanlar sfrdan balayan tamsay deerleridir. Dizinin ilk elemanna deer atamak iin: myStrings[0] = "ilk dizim"; numbers[0] = 10; Java'da bir dizinin eleman saysn (bykl) bulmak iin "length" metodu kullanlr. Bu metodun dndrd deer int tipindedir. int boyut=numbers.length // boyut=5 olur Java'da ok boyutlu diziler yoktur. Fakat bu tr diziler dizi iinde dizi oluturularak simle edilebilir. int k[][] = new int[5][4]; // 5-4 boyutunda bir dizi k[1][3] = 999; // Deer atama Klavye kullanrak kullancnn bilgi girmesini istiyorsunuz, sonrada giirilen bilgiyi ekrana yazdracaksnz. Fakat nasl yaplacan bilmiyorsunuz. Hemen okuyun o zaman : Ekrandan bilgi almak iin BufferReader snfn kullanacaz. BufferReader giris=new BufferReader( new InputStreamReader(System.in)); Bu snfn readLine() metodunu kullanarak bilgiyi alyoruz :

try { String girilen=giris.readLine(); } catch (IOException e ) { System.out.prinln(e);} try-catch blou olas bir hatay yakalamak iin kullanlyor. Eer bir hata oluursa hatay ekrana yazacak. imdide girileni yazdralm. Ekran birey yazdrmak iin System.out snfnn println metodunu kullanacaz : System.out.println ("Girdiiniz ey : " + girilen ); println metodu ekrana verilen parametredeki yazy yazdktan sonra imleci bir alt satra geirir. ayet imlecin bir alt satra gemesini istemiyorsanz print metodunu kullann. Ama bu metodu kullandnzda ekrana bilginin kmas iin akabinde flush metodunuda kullanmalsnz. u ekilde : System.out.print("Ali "); System.out.flush() Bu blmde iaretli ( signed ) appletin ne olduunu ve Microsoft / Netscape web browserlar iin sertifikal appletin nasl yaplacan anlatmaya alacam. Java internet ortamna girdiinde, javay destekleyen browserlardaki buglar yznden ou kullanc java zelliini kapatmak durumunda kalmt. Gnmzde javann gvenlii artm durumda. Bunda browserlarn buglarnn azalmasnn rol olduu gibi sertifika kavramnnda byk rol vardr. KULLANICILAR a. Sertikasz/aretsiz Appletler Neler Yapabilir ? Kullanclarn bilgisayarnda istenmeyen ilemlerin yaplmasn engellemek iin, her browsern gvenlik snrlamalar vardr. Bu gvenlik snrlamasnn tr browsera gre deiir. Gnmzdeki browserlarn java appletlerin iin aadaki gvenlik snrlamalar vardr : - Appletler kullancnn bilgisayarndan veri okumaz ve yazamazlar. - Kullancnn bilgisayarnda program altramazlar. - A balants sadece appletin bulunduu server ile kurulabilir. - Sistem ayarlarn deitiremezler. Bu gvenlik snrlamalarna bakld zaman normal bir applet sadece grafik veya yaz gsterme, ses ve animasyon ilemlerini yapabilir. Byk iler iin normal appletler uygun deildir ki kk bir veri girii dahi olamadan die dokunur uygulama yapmak mmkn deildir. b. Sertifikal ve aretli Nedir ? Appletlerin web sayfalarn daha grsel hale getirmekten baka bir ie yaramad abuk anlald. Ama daha fazlasn; mesela kulancdan bilgi almak ve yazmak; yapabilmek iin gvenlik snrlamalarn kaldrmak gerekiyordu. Fakat bunun mmkn olduu gvenli olmas iin, appletler yeni browserlar iin iaretlenebiliyor. Bunun iin applet gelitiricisinin amacn belirten sertifaya ihtiyac vardr. Sertifa browser okuyabilecei ekilde aktr ve gelitiricinin adn ve kontrol kodu ierir. Bu sertifaka ile gelitirici appleti gvenli olarak iaretler. Baka hi kimse bu sertifikay kullanarak bir appleti iaretletyemez. nk gelitirici appleti iaretlemek iin sertifika ile birlikte verilen zel kodu kullanr. Kullanc appleti altrdnda ( applet olan bir web sayfasn ardnda ) browser appletin iareti ile sertifikay karlatrr. Bylece appletin iareti sertifaka ile uyumlu ise altrr. Bu u anlama geliyor: Doru iaretli bir appletin gelitiricisini kullanc applet yklenirken grr. Ama sadece applet yklenirken. c. aretli Appletler Neler Yapabilir ? aretli bir applet yklendiinde kullancnn karsna bir pencere gelir. Bu pencerede sertifika hakknda bilgiler vardr ve kullanc onay istenir. Kullanc bu bilgiler nda appletin almasna izin verir veya vermez.Kullancnn almasn onaylam bir applet normal programlarn yapabildii hereyi yapabilir. d. Bu Durumdaki Gvenlik ! Burdaki problem onaylama ileminin ya hep ya hi mantnda ilemesidir. Bunun anlam onayladnz bir appletin gerek amacnn dndaki verileride okuyabildii veya istenmeyen bir yere veri yazabildiidir. Tam anlamyla eriim haklarnn belirlenmesi programclara ar geldii iin ou programc tarafndan yaplmyor. Yinde Microsoft ve Netscape'in browserlar iin eriim haklarnn deiik ekilde belirlenmesi karsnda programclar minimum dzeyde eriim hakkyle yetiniyorlar. kinci bir problem ise sertifikann gerekliidir. Gerek sertifikalar, programc tarafndan deil, programcnn gvenilirliine kefil olan irketler tarafndan oluturulmu sertifikalardr. Bu irtketler para karlnda sertifika oluturmaktadr. Bir sertifika en az $200 balayp sertifikaya gre artmaktadr.

Programc yllk olarak $100 balayan fiyatlarda demek zorundadr. ou programc iin bu fiyatlar ar pahal gelmektedir. En azndan herkes bedava kendi sertifasn oluturabilir. Fakat byle bir sertifa, programcnn gerekte kim olduunu ve amacnn doruluunu belirtmez. Hatta test sertifikalar diye anlanlar istenen herhangi bir isim ile oluturulabilir. Her ne kadar insan korkutsada, bilinmeyen bir shareware program denemekten daha gvenlidir. Appleti onaylamak veya onaylamamak bizim elimizde deil mi ? GELTRCLER a. Sertika irketleri Gerek sertifakalar sertifa irketleri ( Certificate Authority ksa CA ) tarafndan veriliyor. Bu irketler programncnn yada irketlerin amacn kontrol ettikten sonra sertifika veriyorlar. En tannm sertifika irketleri VeriSign, Thawte ve BelSign. Her CA, verecei sertifikalar kendi sertifikas altna tanmlar ki daha nceden gvenli belirlenmi kendi sertifikalar gibi ilem grsnler. CA'lar kendilerine ait sertifikalar daha nceden browserlara tanmlanm ve kurulmutur. Maalesef bu irketlerin verdikleri hizmetin bedeli yksek. Bir defaya mahsus cret $200 dan balyor, yllk cretler ise 100$ dan. uana kadar iaretli appletlern yaygnlamamasnn en byk nedeni bu olsa gerek. b. Test Setifikalar Test sertifikas herkes tarafndan be kuru denmeden oluturulabilen sertifikalardr. Ama programcnn amacn gerek olarak ispatlamayan sertifikalar bunlar. Bu sertifikalarda browsera gre deiiyor. Bir Netscape ve birde Microsoft iin oluturmak gerekiyor. Sun'n HotJava browserna hi girmeyeceim burda, belki ileride onuda ele alrm. c. Microsoft Browser in Test Sertifakas Microsoft browser sertifikas oluturmak iin, Microsoft'un sitesinden bedava indirebileceiniz " Software Developer's Kit ( SDK) " e ihtiyacnz var. Bu yazlm kitinin iindeki programlarn tek tek indirilememesi tabii ki ok kt bir durum. Bu kitin iindeki herhangi bir program iin 20 MB byklndeki bu kiti indirmek zorunda kalyorsunuz. Ama bu kiti CD olarakta sipari edebiliyorsunuz. Bu kit ile gelen ingilizce dkmantasyon tam olarak okunmal, nitekim olmazsa olmaz bir ok nemli parametre mevcut. Burada bu kitin iindeki DOS programlaryla sertifika oluturulmasn ksaca anlatmaya alacam. Bu sadece balang iin yardm niteliindedir. Gerisini dkmana brakyorum. 1. makecert ile Private/Public Key oluturun. Sertifika iin gerekli olan .cer uzantl bir dosya oluacaktr. 2. cerrt2spc ile sertifikay oluturun. Birinci admda oluturduunuz .cer uzantl dosyadan .spc uzantl bir dosya oluturur. 3. cabarc ile class dosyalarnz cab dosyas haline getirin. Bu cab dosyas Internet Explorer tarafndan indirilecek dosyadr. 4. Oluturduunuz cab dosyasn signcode ile iaretleyin. Bu ilem srasnda oluturduunuz .spc uzantl dosyada kullanlacaktr. d. Netscape Browser in Test Sertifakas Netscape programclarn iini biraz daha kolaylatrm Microsoft'a gre, sertifika iin gerekli olan "Signtool" uramadan indirebilecek ve Microsoft'un kitine gre daha kolay kullanm var. Signtool Win95 ve Unix srmleri var. Ksaca admlar : 1. signtool ile Private ve Public Key oluturmak iin -G parametresini kullann. Bu ilem ile x509.cacert adl bir dosya oluacaktr. 2. signtool ile class dosyalarnz jar dosyas haline getirin. Bu ilemleri batch dosyas ilede yapabilirsiniz. Bundan birka yl nce Sun, HotJava adl web browser piyasaya kard. Sun'n bu web browser, Java'y destekliyordu. Buda iine java nesneleri gmlebilen uygulamalarn ilk rneini tekil ediyordu. Bunun ardndan Netscape kendi web browsernada Java desteini ekledi. Ardndan da MS. Gn getikce Java'nn yeni srmleri kt. Bununla birlikte Netscape ve MS kendi ihtiyalarna uygun snf ktphanelerini eklediler browserlarna. Bylece her browsern kendine zel JVM ( Java Virtual Machine ) 'i oldu. Dolaysyla browserlarn iine gmlen JVM ile browserdan bamsz olarak JVM 'i gncellemek imkanszd. Sun, herhangi bir ortamda Java'nn alabilmesi iin gerekli olan hereyi ieren ( Java VM ve snf ktphaneleri ) JRE 'yi kard. Eer JRE bilgisayarnzda yklyse, herhangi bir uygulamaya ( rnein

10

browser ) gmlm java nesneleri alabiyor. Sorun, browserlarn sadece kendi JVM lerine bakmalar ve makinada ykl olan JRE 'ye ulamak iin bir mekanizmaya sahip olmamalaryd. Sun olaya el att : Java Plug-In Sun'n gelitirdii Java Plug-In, JRE 'ye HTML sayfalarndan browser kullanarak ulamak iin bir mekanizma. Java Plug-In, Sun'n web sitesinden bedavaya indirilebiliyor. Sayfaya girildiinde, istenen java srm kullancnn makinasnda ykl deilse, kullanc Java Plug-In sayfasna ynlendirilir. Java Plug-In, Netscape'de plug-in olarak, IE 'de ise ActiveX Control olarak otomatik yklenir. Java Plug-In Kullanmak Java Plug-In, Netscape'de EMBED, IE 'de ise OBJECT tag sayesinde kullanlabilir. MIME tipi ile istenen java srmn belirtmelisiniz. rnein Java 1.2 srmnn zelliklerini kullanan bir appletiniz varsa, MIME tipinde bunu belirterek appletinizin doru almasn salarsnz. MIME Tipi Nesne Tipi / Srm application/x-java-applet; Applet / Mevcut srm application/x-java-applet;version=1.1 Applet / Java 1.1 application/x-java-applet;version=1.2 Applet / Java 1.2 application/x-java-bean; Bean / Mevcut srm application/x-java-bean;version=1.1 Bean / Java 1.1 HTML sayfasna appletinizi geleneksel yntemlerle koymak isterseniz, yani Java Plug-In kullanmak istemiyorsanz APPLET tagn kullanmanz gerekir. APPLET tagnn kullanm iin buraya tklaynz. Java Plug-In kullanmak istiyorsanz; Netscape iin EMBED tagn kullanmalsnz : <HTML> <BODY> <EMBED type="application/x-java-applet;version=1.1" width="200" height="200" code="Appletim.class" codebase="/appletler/" parametre1="2" pluginspage="http://java.sun.com/products/plugin/1.1/plugin-install.html"> <NOEMBED> Applet Desteklenmiyor </NOEMBED> </EMBED> </BODY> </HTML> PLUGINSPAGE ve TYPE alt tagn kullanmanz gerektiini unutmaynz. nk browser Java Plug-In ykleme sayfasn ve srm bilmesi gerekir. APPLET tagnda kullanlan PARAM alt tagn bu durumda kullanmazsnz. Parametreleri direkt, rnekte grld gibi ( parametre1="2") direkt yazmalsnz.CODE, CODEBASE,WIDTH,HEIGHT gibi alt taglar APPLET tagnda olduu gibi kullanlr. Internet Explorer iin OBJECT tagn kullanmalsnz : <HTML> <BODY> <OBJECT classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" width="200" height="200" codebase="http://java.sun.com/products/plugin/ 1.1/jinstall-11-win32.cab#Version=1,1,0,0"> <PARAM NAME="code" VALUE="Appletim.class"> <PARAM NAME="codebase" VALUE="/appletler/"> <PARAM NAME="type" VALUE="application/x-java-applet;version=1.1"> <PARAM NAME="parametre1" VALUE="2"> Applet desteklenmiyor </OBJECT> </BODY> </HTML> Burada CODEBASE alt tag gml nesnenin gerektirdii ActiveX Controlnn yeridir. Java'ya ait codebase,type,code gibi taglar PARAM alt tag ile belirtilir. Netscape ve IE iin farkl yntemlerin kullanlmas, her biri iin ayr web sayfalarmz olaca anlamna gelmiyor. HTML kodu kullanarak her ikisi iinde geerli bir sayfa hazrlayabilirsiniz. Fakat byle bir HTML kodu yazmak iin kendinizi kasmayn. nk Sun, Java Plug-In ile beraber HTML eviricisi ( HTML Converter ) sunuyor. Bu evirici sayesinde HTML sayfasnda kullanlan APPLET taglar her iki browserda da kullanlabilecek ekilde evriliyor Symantec Visual Cafe Inprise (Borland) JBuilder Windows 95/98/NT ve MacOS Windows 95/98/NT

11

MS Visual J++ Windows 95/98/NT IBM VisualAge for Java Windows 95/98/NT ve OS/2 MetroWerks Code Warrior with Java Windows 95/98/NT ve MacOS Sun Java Studio Windows 95/98/NT ve Solaris Simplicity for Java Windows 95/98/NT, MacOS, Solaris, OS/2 ve herhangi bir Java 1.1 ortam Oracle Jdeveloper Windows 95/98 ve NT rn JBuilder zerine yaplan baz eklemeler ile oluturulmu.

Sybase PowerJ Windows 95/98/NT SuperCede Windows 95/98/NT Sun Java Workshop Windows 95/98/NT ve Solaris Apptivity (Progress Software) Windows 95/98/NT NetBeans Windows 95/98/NT, MacOS, Solaris, OS/2 ve herhangi bir Java 1.1 veya 1.2 ortam

Java programlarndan mevcut veritabanna balant kurmak iin SUN, JDBC ktphanesini gelitirdi. Bu sayfalarda JDBC 'nin nasl kullanlacan bulacaksnz. Giri JDBC konusuna giri, JDBC nedir ? JDBC iin neler gerekli ? Hangi veritabanlarna eriilebilir ? Srcler Src nedir, ne ie yarar ? Bana gerekli srcleri nasl bulabilirim ? JDBC-ODBC kprs, Src Yneticisi. Balant Kurma Veritabanna balant kurma ilemi nasl yaplyor ? Hangi snflar ve komutlar kullanmam lazm ? Sorgulama & Sonucun Alnmas Veritabanndaki herhangi bir kayda ulama, herhangi bir kritere gre kayt aratma, ksacas sorgulama ve sorgulama sonucunun alnmas ilemleri. Veri leme Veritabanna kayt ekleme, veritabanndaki bir kayd deitirme, veritabanndan kayt silme ilemleri nasl yaplr ? Toplu ileme nedir, nasl yaplr ? Store Procedure Store procedure 'm var. Java'dan nasl altracam. Parametre gnderme ve dnen deerlerin alnmas hangi komutlarla yaplyor. Java programlarndan mevcut veritabanna balant kurmak iin SUN, JDBC ktphanesini gelitirdi. Bu sayfalarda JDBC 'nin nasl kullanlacan bulacaksnz. Giri JDBC konusuna giri, JDBC nedir ? JDBC iin neler gerekli ? Hangi veritabanlarna eriilebilir ? Srcler Src nedir, ne ie yarar ? Bana gerekli srcleri nasl bulabilirim ? JDBC-ODBC kprs, Src Yneticisi. Balant Kurma Veritabanna balant kurma ilemi nasl yaplyor ? Hangi snflar ve komutlar kullanmam lazm ? Sorgulama & Sonucun Alnmas Veritabanndaki herhangi bir kayda ulama, herhangi bir kritere gre kayt aratma, ksacas sorgulama ve sorgulama sonucunun alnmas ilemleri. Veri leme Veritabanna kayt ekleme, veritabanndaki bir kayd deitirme, veritabanndan kayt silme ilemleri nasl yaplr ? Toplu ileme nedir, nasl yaplr ? Store Procedure Store procedure 'm var. Java'dan nasl altracam. Parametre gnderme ve dnen deerlerin alnmas hangi komutlarla yaplyor. Bu logo'yu daha nce grdnz m ? Peki ne anlama geliyor biliyormusunuz ? Logoda belirtilen %100 Pure Java ifadesini, ben Trke'ye %100 Katksz Java diye evirdim. Bildiiniz zre Java platformdan bamsz bir programlama dili olarak ortaya kt. Bunun anlam Java ile gelitirdiiniz programlar ister Windows, ister Mac isterse Unix olsun tm platformlarda alacaktr. Gl gr ki kazn aya yle deil. Java ile gelitirilmi baz programlar sadece bir platformda veya birka platformda dzgn alyor. te %100 Katksz Java logosu, Java programnn tm platformlarda sorunsuz alacan belirtiyor.

12

Peki bu logoyu kimler kullanabiliyor ? nne gelen herkes kullanabilir mi ? Tabii ki HAYIR. Bu logoyu kullanabilmek iin KeyLabs 'a bavurmak gerekiyor. KeyLabs bamsz bir sertifikasyon merkezidir. Programnzn %100 Katksz Java olup olmadn kendinizde kontrol edebilirsiniz. Bu ilemi JavaPureCheck isimli program kullanarak yapabiliyorsunuz. JavaPureCheck programnzn kulland snflar kontrol ediyor ve size sonu hakknda bilgi veriyor. Bu program buraya tklayarak indirebilirsiniz. %100 Katksz Java sertifikasn almak bedava mdr ? Ne yazk ki HAYIR. lk program iin 1000 $ cret alyorlarm. Daha sonrakiler iin indirim yapyorlarm. %100 Katksz Java sertifikal bir programnzn bu sertifikas ne kadar sre geerli diye bir soru aklnza geliyor ise, programda deiiklik yapmadnz srece geerlidir. Fakat deiiklik veya ekleme yaptnz programlar iin sertifika paras olarak 500 $ dyorsunuz. Chat ne demek ? Bunu internetle birazck alakal olan herkes biliyordur herhalde ! Chat, sohbet etmektir. Bu sohbet iki veya daha fazla kii arasnda olabilir. Internet ile dnyann drt bir kesindeki insanlarla sohbet edebilirsiniz. Bunun iin elbette yazlma ihtiyacnz var. eitli yazlmlar mevcut : MIRC , PIRCH gibi. zel chat yazlmlar kullanmadan bu i yaplamaz m peki ? Belki sizde rastlamsnzdr, web sayfalar zerinden chat bile yapmsnzdr belkide ? te bizde bu sayfalarda java ile byle bir chat program hazrlayacaz. Hazrsanz balayalm. Gvenlik Appletlerin, yani HTML sayfalarna balanm java programlarnn gvenlik nedeniyle baz kstlamalar vardr. rnein : Appletler sadece yklendikleri server ile balant kurabilirler. Bir applet "www.javasayfasi.net" 'den yklenmi ise, sadece "www.javasayfasi.net" ile balant kurabilir. Aksi taktirde ( baka bir server ile balant kurmaya alrsa ) browser 'n status (durum) ubuunda "Applet can't start: Security violation: security.socket.connect" hatas belirir. Ayn hata balant kurulmak istenen porttan cevap alnlamad durumlarda da ortaya kar. rnein chat-server almyorsa, chat server 'n dinledii porttan cevap alnamaz. URL 'ler Baka bir bilgisayar ile balant kurmak iin, o bilgisayarn internet adresinden faydalanyoruz. rnein "www.javasayfasi.net" gibi. Balanty java ile kurmak iin snf oluturuyoruz. Aadaki rnek java kodu "www.javasayfasi.net" adl bilgisayardaki index.html dosyasna ulamak iin kullanlyor. try { baglantiurl= new URL("http://www.javasayfasi.net/index.html"); } catch (MalformedURLExceoption e) { getAppletContext().showStatus("Ulalamayan URL:" + baglantiurl); } Yukarda grld gibi try { } catch { } blou ile balant kurmay deniyoruz ve hatalar yakalayabiliyoruz. Hata olumas durumunda status ubugunda "Ulalamayan URL : www.javasayfasi.net " eklinde bir mesaj kmasn salyoruz. Hata olumamas durumunda adresini verdiimiz server'a, hatta bu durumda o server 'daki bir dosyaya ulam oluruz. Bundan sonraki adm ise verilerin alnmas, bunu C++ 'dan tandmz stream 'lerle yapacaz. Stream Stream, basit olarak iki nokta arasndaki balantdr. Bir taraf verileri gnderirken dier taraf verileri alr. Stream 'de gzel olan iki taraf iinde kar tarafta ne olduu nemli deildir. rnein verileri gnderen tarafta bir dosya, klavyeden girilmi manuel bir bilgi veya baka bilgisayar ile kurulmu bir veri balants olurken, alc taraf bir program bir dosya vb. olabilir. Yukarda kurulan balantdan veri alabilmemiz iin stream kullanmamz gerekiyor. URL snfnn openStream() adl metodu tam bu i iin. Aadaki kod, yukardaki URL balantsndan satr satr bilgi okuyup bunu gsteriyor. try { InputStream is=baglantiurl.openStream(); DataInputStream dis=new DataInputStream(is); } catch (IOException e) {} while(in.blabla()) { try { satir=in.readLine();

13

System.out.println(satir); } catch (IOException e) {} } Socketler Streamler ile olan zm geri iletiim kurmak iin bir yntemdir ki veriler bir noktadan dierine aktarlyor. Sohbetlerde letiimin ift tarfal olmas gerektii bir gerek, aksi taktirde bir taraf hep sukut halinde deil midir ? Geri streamler ile server'a veri gnderilebilir. Server 'da alan bir cgi programda bu verileri alp deerlendirir. Ama Internetin temelini oluturan TCP/IP protokol ift tarafl iletiimler iin daha iyi bir yntem sunuyor : Socketler TCP/IP protokolnn bir zellii verilerin paketler halinde alnp verilmesini salamasdr. Verilerin doru adrese ulamas iin de her pakete bir IP adresi verilir. Internet teki tm server larn bir IP adresi vardr. Bir network ortamndaki bir ok kullanc farkl serverlar ile balant kurarken, bir kullancda bir ok server ile balant kurabilir. Kurulan balantlarn akmamas iin her veri paketine IP adresinin yannda bir numara daha verilir. Bu numara port numarasdr. IP adresi ve port numaras ile veri paketi dortu yerine ular. Bu IP adresi ve port numaras kombinasyonuna Socket denir. Baz portlar standart hale getirilip, rezerve edilmitir. rnein Telnet iin port 23 , WWW iin port 80 standarttr. 256 'nn altndaki tm portlar standart a hizmetleri iin rezerve edilmitir. 256 ile 1024 arasndaki portlar UNIX hizmetlerine tahsis edilmitir. rnein : rlogin 1024 ile 16384 arasndaki portlar serbesttir ve kullanlabilir. Bizim yazacamz chat sisteminin standart bir portu yok. Kendimize 1024 iel 16384 arasnda bir say seebiliriz. Ben 8888 numaral portu setim. Umarm bir itiraznz yoktur. Eer var ise siz baka bir port kullanabilirsiniz. Sunucu / stemci ( Client / Server ) Socketler yardm ile chat sistemimizi programlamaya balayacaz. Belli bir appleti ykleyen kullanclarn birbirleri ile sohbet etmesini salayacak bu sistemimiz. Daha ncede bahsettiim gibi gvenlik nedeniyle appletler birbirleri ile direkt iletiim kuramazlar. Bu nedenden dolay chat sistemimizi Sunucu/stemci mimarisine gre gelitireceiz. Server zerinde bir uygulama alacak devaml balant bekleyen ve balant isteklerine cevap veren. Appletin baland HTML sayfasda bu server zerinde olmaldr. Tabii ki bu server zerinde Web server da kurulu olmas gerekir. HTML sayfasi dier bilgisayarlar ( kullanclar ) tarafndan yklediinde, bu sayfann iinde olan applet alacak ve server ile balant kuracaktr.Girilen tm veriler server'a gnderilecek, server ise gelen bilgileri, kendisine bal olan tm kullanclara geri gnderecektir. Chat Sistemi Chat sistemimiz toplam 3 snftan oluacak. Birincisi Chat Server, server zerinde alacak ve balant taleplerine cevap verecektir. kincisi Baglanti Snf, Balant taleplerini karlayacak ve kullanclar arasndaki veri iletiimini dzenleyecek. ncs Chat Applet, kullancnn bilgisayarnda alacak. Chat Server Snf ncelikle kullanacamz standart snf paketlerini yazalm: import java.net.*; import java.io.*; import java.util.*; java.net ierisinde Socket veya URL gibi internet iletiiminde gerekli olan snflar bulunuyor. java.io ierinde Giri/k snflar , java.util ierisinde ise bir sr gerekli snf bulunuyor. public class chatserver implements Runnable { ... } Chat Server snfmz kendi bana alan bir thread eklinde olacaktr. Bunun iin implements Runnable kullanyoruz. public static final int PORT = 8888; protected ServerSocket dinle; protected Vector baglantilar; Thread baglan; Snf tanmndan sonra deiken tanmlarn yaptk. PORT sabit bir deiken ve daha nceden karar verdiimiz port numaras atanm. "dinle" balant taleplerini dinlemek iin. "baglantilar" aktif balantlarn tutulaca liste iin. "baglan" chat server snfnn thread 'ini tutuyor. public static void main(String[] args) {

14

new chatserver(); } main metodumuzda chat server snfmz oluturuyoruz. public chatserver() { try { dinle = new ServerSocket(PORT); } catch (IOException e) { System.err.println("Socket oluturulurken hata :"+e); System.exit(1); } baglantilar = new Vector(); baglan = new Thread(this); baglan.start(); } Chat server snfmzn balangnda (constructor) verilen portta bir socket alyor ve olas hatalar yakalanyor. Sonra balantlarn tutulaca liste ve thread oluturulup altrlyor. public void run() { try { while(true) { Socket istemci=dinle.accept(); baglanti b = new baglanti(this, istemci); baglantilar.addElement(b); } } catch (IOException e) { System.err.println("Balant talebi beklerken hata :"+e); System.exit(1); } } run () metodu yani asl alan ksm sonsuz dng iinde balant taleplerini bekliyor. Balant talebi geldiinde bu talep iin baglanti adnda yeni bir connection nesnesi oluturuyor. Niye her bir talep iin yeni connection nesnesi oluturuyor diye bir soru geldi ise aklnza, Server bundan sonraki balant taleplerine cevap verebilsin diye. public void mesajgonder(String msg) { int i; baglanti sen; for (i=0; i<baglantilar.size(); i++) { sen = (baglanti) baglantilar.elementAt(i); sen.out.println(msg); sen.out.flush(); } } mesajgonder metodu tm aktif balantlara msg parametresi ile gelen mesaj gnderir. Aktif balantlar chat server snfnda tutulduu iin bu metod chat server snfnda kullanlmad halde bu snfn iinde bulunmas gerekiyor. Baglanti Snf Baglanti snf chat server snf tarafndan oluturulur ve aktif balantlar arasndaki iletiimi kontrol eder.

15

import java.net.*; import java.io.*; class baglanti extends Thread { ... } Her balant talebi iin baglanti nesnesi oluturulur. Bu nesne balant talebini alr ve balant sonuna kadar altrr. Bundan dolay her balant kendi bana bir thread olmaldr. protected Socket istemci; protected BufferedReader in; protected PrintWriter out; protected chatserver server; istemci Chat Server 'dan Socket i alr. in ve out adl Giri/k streamleri bu nesne ile balantl olacaklardr. server Chat Server objesini gsterir. public baglanti(chatserver server, Socket istemci) { this.server=server; this.istemci=istemci; try { in =new BufferedReader(new InputStreamReader(istemci.getInputStream())); out = new PrintWriter(istemci.getOutputStream()); } catch (IOException e) { try { istemci.close(); } catch (IOException e2) {System.err.println("Stream oluturulurken hata : " + e); return; } this.start(); } Baglanti snfnn balangcnda (constructor) parametre olarak alnan server ve istemci deikene saklanyor. Sonra bir giri ve bir k stream i oluturulmak isteniyor. Bu srada oluacak hatalar catch() tarafndan yakalanyor. public void run() { String satir; try { while(true) { satir=in.readLine(); if(satir!=null) server.mesajgonder(satir); } } catch (IOException e) { System.out.println("Hata:" + e); } } Baglanti snfnn asl alan ksm gelen mesajlar aktif balantlara gnderen sonsuz bir dngden oluuyor. Mesaj gndermek iin chat server snfn mesajgonder metodu kullanlyor. Chat Applet Toplam snfmzdan biri olan chat appleti, tek grafik arayzne sahip snftr. Bu yzden java.applet paketinin yannda java.awt snf paketininide kullanmas gerekiyor. import java.net.*; import java.io.*;

16

import java.awt.*; import java.applet.*; import java.awt.event*; public class chatapplet extends Applet implements Runnable,ActionListener { ... } Chat Applet snf Applet snfn miras alr ve Thread kullanr. Mesaj yazldktan sonra Enter'a baslp baslmadn kontrol etmek iin ActionListener snfn kullanyoruz public static final int PORT = 8888; Socket socket; BufferedReader in; PrintWriter out; TextField inputfield; TextArea outputarea; Thread thread; PORT, socket, in und out chatserver ve baglanti da aklanan ile ayn anlam tar. inputfield giri nesnesini outputarea ise k nesnesini tutuyor. thread kendine ait Thread 'i saklyor. public void init() { inputfield = new TextField(); outputarea = new TextArea(); outputarea.setFont( new Font("Dialog", Font.PLAIN, 12)); outputarea.setEditable(false); this.setLayout(new BorderLayout()); this.add("South", inputfield); this.add("Center", outputarea); this.setBackground(Color.lightGray); this.setForeground(Color.black); inputfield.setBackground(Color.white); outputarea.setBackground(Color.white); inputfield.addActionListener(this); } Init metodunda grafik arayz hazrlanyor. Giri sahas (Textfield) ve k sahas (Textarea) oluturulup, giri sahas aaya gelecek ekilde yerletiriliyor. Bunun akabinde renkler belirleniyor. En son satrda ise mesaj girilecek yaz alannda meydana gelen Enter'a basma olayn anlamak iin ActionListener ekliyoruz. public void start() { try { socket = new Socket(this.getCodeBase().getHost(), PORT); in = new BufferedReader(new InputStreamReader(socket.getInputStream())); out = new PrintWriter(socket.getOutputStream()); } catch (IOException e) { this.showStatus(e.toString()); say("Server ile balant kurulamad!"); System.exit(1); } say("Server ile balant kuruldu..."); if (thread == null) { thread = new Thread(this); thread.setPriority(Thread.MIN_PRIORITY); thread.start();

17

} } Start metodunda applet server ile balant kurulmaya allyor. Gerekli olan server adresi HTML dkman tarafndan belirleniyor. Bu da daima HTML dkmann bulunduu servern adresidir. Baka serverlar ile balantya izin verilmedii iin, baka server olmasnnda hi bir anlam yok. Hata oluursa veya balant kurulursa, sonu bir mesaj ile kullancya bildiriliyor. Bundan sonra kendi thread 'ini oluturup balatyor. public void stop() { try { socket.close(); } catch (IOException e) { this.showStatus(e.toString()); } if ((thread !=null) && thread.isAlive()) { thread.stop(); thread = null; } } Stop Metodu browser tarafdan, kullanc sayfay terk ettii zaman otomatik olarak arlr. Socket kapatlyor ve thread durduruluyor. public void run() { String satir; try { while(true) { satir = in.readLine(); if(satir!=null) outputarea.append(satir+'\n' ); } } catch (IOException e) { say("Server ile balant kesildi."); } } run metodunda sonsuz bir dg iinde giri sahasndan girilen mesajlar, k sahasnda gsteriliyor. public void actionPerformed(ActionEvent e) { if (e.getSource()==inputfield) { String inp=inputfield.getText(); out.println(inp); out.flush(); inputfield.setText(""); } } actionPerformed, kullanc giri yaptnda aktif olur. Kullancnn giri sahasna girip girmediini kontrol ediyoruz. Bu taktirde girileni alp servera gnderiyoruz. Giri sahasn tekrar boaltyoruz. public void say(String msg) { outputarea.append("*** "+msg+" ***\n"); } Say Metodu girilen mesaj bana ve sonuna yldz ekleyerek gsteriyor. Derleme & altrma imdi chatserver ve chatappleti derleyelim.

18

javac chatserver.java javac chatapplet.java Bu ilem sonucunda class oluacak, chatserver otomatik olarak baglanti class oluturur. Bizim chat sistemimiz JDK 1.1 metodlarn kullanyor. Bu yzden JDK 1.1 desteklemeyen Netscape 3 hatta 2 gibi browserlarda appletimizin almayacaktr. imdi chat server 'a balatalm. Yoksa kullanclar balanamaz deil mi ? java chatserver HTML Sayfas Appletimizi balayacamz ufak bir HTML sayfas hazrlayalm. Siz bu sayfay ssleye bilirsiniz. <html><head><title>Sohbet</title></head> <body bgcolor=000000 text=ffffff> <center> <applet code="chatapplet.class" width=95% height=60%> </applet> </center> </body></html> Bu HTML sayfasn appletin bulunduu dizine kopyalayn ve en az iki browser penceresi an. Her iki pencereye de yukardaki HTML sayfasn ykleyin. yi sohbetler. Eer sadece kendi kendinize sohbet etmek istemiyorsanz, kendinize bir web server kurmal ve insanlarn bunu dardan grebilmelerini salamalsnz. Dial-up balanyor olsanz bile online olduunuz zamanlar arkadalarnz chate davet edebilirsiniz. Her zaman ulalmasn istiyorsanz, web hosting yapan bir kurulula anlamanz gerekir. Ama ou kurulu sizin chat server'nz altrmak istemeyecektir. Kim bilir belki siz chat server 'nz altrmalarn belki salayabilirsiniz. Sadece Balang Bu sisteme bir sr fonksiyon eklenbilir. IRC programlarn grenler, bir ok fonksiyon olduunu bilirler. rnein her kullancya bir isim atamak, kullanclar arasnda zel mesajlama gibi... Ama bu sadece iin balangc, sizin bir chat sistemi nasl yazlr, bunun temelini vermeye altm. Gerisi size kalm. Kendinize kopyalayn ! Kaynak Kodlar (java) Derlenmi (class) Appletler, dinamik web tabanl ierik iin en ideal programcklardr. Teorikte bir kere yaz, her bilgisayarda, her browserda ve her iletim sisteminde altr; mantn ileri sren Sun bunu "Bir kere yaz, her yerde altr ( Run Once, Run Anywhere ) " sloganyla lanse ediyor. Ne gzel bir hayal ! Pratikte, birok java programcs ve birok kullanc Java appletlerinin baarsna sebep olduunu sylyorlar. "Neden applet almyor ?" ierikli birok mail geliyor. Applet alt zaman tam alyor, almad zaman ise byk bir sorun halini alyor. Hatay bulmak ve hatay dzeltmek gerekten baarsna neden olabiliyor. Hatta Java ile program gelitirmeyi bu yzden brakanlar bile var. Deiik browserlar, browser srmlerinin farkllklar, hatta browser konfigrasyonlarndaki farkllklar appletlerin almasnda rol oynayabiliyor. Browserlara gml Java Sanal Makinasndaki ( Java Virtual Machine ) buglar ve bilgisayarn performansda etkili oluyor. ayet browser'nz hibir appleti altramyor ise, java applet ihtiva eden bir sayfay ardnzda taklp kalyorsa browser yazlmn tekrar kurmak ou zaman problemi ortadan kaldryor. Bu sz konusu deilde, gri bir dikdrtgenden baka bir ey gremiyorsanz bunun bir ka sebebi olabilir. Neden gri dikdrtgen ? Appletin yklenmesi srasnda veya yklendikten sonra altrlmas srasnda meydana gelen hatalardan dolay oluur. Java programlama dilinde bunun teknik ad "Exception" dr. Trke karl tam olarak istisna durum veya harici durum olmasna karn, ben bunu hata olarak trkeye evirmeyi daha uygun buluyorum. Java'da hatalar yakalama imkan olduunu biliyoruz, daha dorusu bilinen ou hatay desek daha iyi olur. Oluan hatalar bilinmedik, beklenmedik hata veya appletden kaynaklanmayan hatalar olabildii iin bu hatalar yakalama imkan yok. imdi en ok karlalan ve bilinen hatalar inceleyelim : Class dosyasna ulaamama veya ykleyememe Bilindii gibi applet dediimiz programcklar, derlendikten sonra class dosyas halini alyorlar. Appletlerin almas iin bu class dosyalarnn yklenmesi gerekiyor. ayet class dosyasnn yeri bulunamaz veya dosya yklenirken hata oluur ise gri kutunun iinde class dosyasn bulunamadna

19

dair veya yklenirken hata olutuuna dair bir hata mesaj kar ve applet almaz. Applet almad iin, ki hata daha applet yklenirken olutuu iin, applet kodu iinden bu hatay yakalamanz ve engellemeniz mmkn deildir. Bu hata ou durumda, <applet> tag iinde class dosyasnn bulunduu yeri yanl olarak belirtildii zaman ortaya kyor. A kaynaklarna eriememe Baz zamanlar a zerinde bulunana server ger veya herhangi bir sebepten balant kurulamaz. Kullanc firewall arkasndadr ve Socket, DatagramSocket istekleri almaz. Eer a kaynaklarna eriim gerektiren bir applet yazyorsanz, iletiim iin TCP/UDP protokl yerine HTTP protokln kullann. nk firewall arkasnda olan kullanc says gn getike artyor. Karlalan dier bir hata sebebi ise, browserlarn appletler ile ilgili kstlamalarndan kaynaklanyor. Appletviewer'da sorunsuz alan applet, browserda almyor. Applet sadece bulunduu server ile balant kurabilir. Birok applet ise domain isimlerini IP adresine evirirken hata oluturuyorlar. Bunu nlemek iin domain ismi yerine IP adresi kullann. Null Hatalar ok karlalan hatalardan biriside NULL hatalardr. Bu appletin kodundan kaynaklanan ve appletin almamasn salayan bir hatadr. Bir deikene bir nesne atarken, nesnenin deerinin Null ( deersiz ) olmamasna dikkat edin. Aadaki rnei inceleyin : rnek : String sayac = getParameter ("sayac"); //sayac parametresini al if ( sayac == null ) // Eer sayac null ise sayac = "1"; // sayac deerini "1" yap. Biraz dikkat ile, web sayfalarnda nmze kan gri dikdrgen kutucuklar azaltabiliriz. Java konusunda bir ok yanl kan var. Bunlardan bir kana bu yaz ile cevap vermeye alam. Kan Appletler lokal sabit diskteki dosyalar okuyabilirler, silebilirler. Gerek Appletlerden sabit diskteki bir dosyaya eriilmek istendiinde, java hata (SecurityException) oluturur. ayet hata oluturmaz ise, applet taklp kalr (crash), ama dosya eriimi mmkn deildir. Dijital iaretlenmi appletler, yani sertifikal, istisnadr. Bu tr applet ile karlaldnda, browser sizden onay isteyecektir. Onay penceresinde sertifika hakknda bilgiler vardr. ( Ayrntl bilgi iin Java Sertifikas ). Onay vermediiniz taktirde gvendesiniz. Kan Java web browser ile alr. Gerek Java'nn deiik tipleri vardr, en ok bilinen java appletleridir. Java appletleri web browser ve Appletviewer ile alrlar. Java programlar, herhangi baka bir program ( rnein MS Word ) gibi alrlar. Sun,Microsoft gibi yazlm reticilerinin JVM ( Java Virtual Machine ) 'sini kurmanz durumunda java programlarn, bildiiniz herhangi bir program gibi altrabilirsiniz. Java servlet'leri web server zerinde alrlar. Servlet'lar CGI script ve ASP ( Active Server Pages) 'nin alternatifidirler. CGI scriptlerden daha hzl ve daha etkilidirler. Kan Java, C 'ye gre 1000 kat daha yavatr. Sakn nemli programlar iin kullanmayn. Gerek Orjinal JVM gerekten yavat. C program ile karlatrldnda, bu yavalk 20 katlara kadar varabiliyordu. Ama iyi dizayn edilmi JVM'ler sayesinde, Java ve C/C++ arasndaki fark kapanyor. Tabii ki, byte kodunu gerek makina koduna dntren JIT ( Just-In-Time ) 'ide unutmamak lazm. Appletlerin yavalndaki en byk etken, appletlerin yklenmesinden kaynaklanyor. zellikle byk appletlerde bu ok skc olabiliyor. Neyseki java programlarnda ve servlet'larda yklenme sorunu yok.

20

FLOWLAYOUT SINIFI FlowLayout snf en basit bir yerleim yneticisidir. Bileenler tek bir satra yerletirilir. Sgmayan bileenler dier alt satra otomatikman yerletirilir. FlowLayout snf u sabitlere sahiptir. LEFT-0 , CENTER-1 , RIGHT-2 Kurucular FlowLayout() 5 piksel dey ve yatay aralkl olduu varsaylan ve merkeze yaslanm dzen sunar. FlowLayout(int align) Align parametresi ile nereye yaslanaca belirlenmi bileenlerin yerleimini saglar.. FlowLayout(int align,int hgap,int vgap) Align parametresi ile nereye yaslanaca ve hgap(satr iinde bileenler aras boluk), vgap(stun iinde bileenler aras boluk) belirlenmi yeni bir yerleim salar. GRDLAYOUT SINIFI Eit boylarda hcrelerden oluan bir zgara biiminde yerleim saglar. Kurucular GridLayout (int rows,int cols) Srtn ve satr says belirlenmi zgara biimli bir yerleim saglar. GridLayout (int rows,int cols,int hgap,int vgap) Srtn ve satr says belirlenmi zgara biimli bir yerleim saglar. Ayn zamanda hgap(satr iinde bileenler aras boluk), vgap(stun iinde bileenler aras boluk) belirlenmi yeni bir yerleim salar. BORDERLAYOUT SINIFI En fazla 5 hcreye ayrlr.Bileenler North,South,East,West,Center olmak zere appletin,frameye yerletirilir. Kurucular BorderLayout () Yeni bir borderlayout snf oluturur. BorderLayout (int hgap,int vgap) Yeni bir borderlayout snf oluturur. hgap(satr iinde bileenler aras boluk), vgap(stun iinde bileenler aras boluk) belirlenmi yeni bir borderlayout snf oluturur. STANDART YERLEM YONETCLERNN KULLANILMAMASI (SETBOUNS METODU) Bunun iin setBouns metodu uygulanr.Ama nceden setLayout(null); tanmlanmaldr. Bileenlerde yle uygulanr. SetBounds(stun,satir,genilik,boy); Buton1.setBounds(10,20,50,60); gibi
// Program Ad: flowlayout.java //Ornek Kod1..: FlowLayout yerleim yneticisinin kullanlmasi. import import import java.awt.event.*; public class flowlayout Button FlowLayout fl; public void fl=new setLayout(fl); buton1=new Button(" Ben buton2=new Button(" Ben add(buton1); add(buton2); }//init metodunun }//flowlayout applet snfnn sonudur.... // Program //Ornek Kod2..: GridLayout yerleim yneticisinin kullanlmasi. java.awt.*; java.applet.*; extends init() Buton-1 Buton-2 Applet { buton1,buton2;

{ FlowLayout(0,10,10); "); "); sonudur....

Ad:

gridlayout.java

21

import java.awt.*; import java.applet.*; import java.awt.event.*; public class gridlayout extends Applet { Button buton1,buton2,buton3,buton4,buton5,buton6; GridLayout gl; public void init() { gl=new GridLayout(2,3); setLayout(gl); buton1=new Button(" Ben Buton-1 "); buton2=new Button(" Ben Buton-2 "); buton3=new Button(" Ben Buton-3 "); buton4=new Button(" Ben Buton-4 "); buton5=new Button(" Ben Buton-5 "); buton6=new Button(" Ben Buton-6 "); add(buton1); add(buton2); add(buton3); add(buton4); add(buton5); add(buton6); }//init metodunun sonudur.... }//gridlayout applet snfnn sonudur.... // Program Ad: borderlayout.java //Ornek Kod3..: BorderLayout yerleim yneticisinin kullanlmasi. import java.awt.*; import java.applet.*; import java.awt.event.*; public class borderlayout extends Applet { Button buton1,buton2,buton3,buton4,buton5,buton6; BorderLayout bl; public void init() { bl=new BorderLayout(10,10); setLayout(bl); buton1=new Button(" Ben Buton-1 "); buton2=new Button(" Ben Buton-2 "); buton3=new Button(" Ben Buton-3 "); buton4=new Button(" Ben Buton-4 "); buton5=new Button(" Ben Buton-5 "); add("North",buton1); add("South",buton2); add("East",buton3); add("West",buton4); add("Center",buton5); }//init metodunun sonudur.... }//borderlayout applet snfnn sonudur.... // Program Ad: setbounds.java //Ornek Kod4..: setbounds -layoutsuz- kullanm import java.awt.*; import java.applet.*; public class setbounds extends Applet { Button buton1,buton2,buton3,buton4,buton5,buton6; public void init() { setLayout(null); buton1=new Button(" Ben Buton-1 "); buton2=new Button(" Ben Buton-2 "); buton3=new Button(" Ben Buton-3 "); add(buton1); add(buton2); add(buton3); buton1.setBounds(10,10,100,40);//50.stn 50. satra ve genilii 100 boyu 40 buton2.setBounds(70,70,150,50);//70.stn 70. satra ve genilii 150 boyu 50 buton3.setBounds(100,120,160,70);//100.stn 120. satra ve genilii 160 boyu }//init metodunun sonudur... }//setbounds applet snfnn sonudur....

Threadlar genel olorak sanal CPU ya benzetilebilir. Bir thread sanal bir CPU ise bu sanal CPU da istediimiz programlar altrabiliriz. Yani bir thread alrken diger programlar altrabiliriz. stediimiz kadar thread kullanabiliriz. Bunlarn ynetilmesi ve hiyerarisi son derece nemlidir. Aagda threadlarn mantgn anlamak iin ufak bir kod bulunmaktadr. Bu threadn amac sonsuz bir dong kullanlmtr. Bu dongnn degeri Label ile applette gsterilmitir. Bu thread alr iken baka ilemlerle uraabilirsiniz.

22

import java.awt.*; mport java.applet.*; public class thread_ornegi extends Applet implements Runnable { Thread kanal1; int dongu=0; Label l=new Label(); public void degis() { Font kalin = new Font ("TimesRoman",Font.BOLD,34); l.setText("Dng Durumu...: " + dongu); }//degis metodunun somudur... public void start() { kanal1=new Thread(this); kanal1.start(); add(l); } //start n sonudur.... public void stop() { kanal1.stop(); } //stop un sonudur... public void run() { while(true) { try { kanal1.sleep(35); dongu++; } catch(InterruptedException e) {} degis(); } } //run n sonuudur..... }//snfn sonudur..... imdide birden fazla threadn kullanmn grelim. Bunun iin ayr ayr classlarla threadlar kullanlr. Bu claass gerekli yerlerden agrlarak altrlr. Aagda bu konuyla ilgili bir kod bulunmaktadr. ki ayr dng var. Bu dglerin degerleri Label ile applette gsterilmektedir. import java.awt.*; import java.applet.*; public class thread1 extends Applet implements Runnable { Thread thread1; int dongu1=0; Label l=new Label("Dong...: "); thread2 t2=new thread2(); public void degis() { Font kalin = new Font ("TimesRoman",Font.BOLD,24); l.setText("Dng Durumu...: " + dongu1 + " " + t2.dongu2); } public void start() { thread1=new Thread(this); thread1.start(); add(l); } //start n sonudur.... public void stop() { thread1.stop();} //stop un sonudur... public void run() { while(true) { try { thread1.sleep(35); dongu1++; } catch(InterruptedException e) {} degis(); }} //run n sonuudur..... }//snfn sonudur..... class thread2 extends Thread{ Thread thread2; int dongu2=0;

23

public thread2() { thread2=new Thread(this); thread2.start(); }//constrktur sonu... public void run() { while(true) { try { thread2.sleep(750); dongu2++; } catch(InterruptedException e) {} }} //run n sonudur..... }//snfn sonudur..... Burada birinci kanaln sleep degeri 35, ikinci kanalan sleepi ise 750dir. Yani her 35 ve her 750 milisaniyede bir bu threadlar altrlacaktr. Geri kalan zaman aralklarnda kullanc istedii ilemleri yapabilecektir. Bundan dolay makine kitlenmez. Aagdaki rnekte threadlarn en ok kulland alanlardan birisi olan animasyon rnegi verilmitir. Bu rnekte class dosyalarn bulunduu dizine *.gif dosyalarn koplayanz. import java.awt.*; import java.applet.*; public class animasyon extends Applet implements Runnable{ Image resimler_dizisi[]=new Image[10]; String resim_ata; Image resim; Thread thread; int i; public void init() { for(i=0;i<10;i++) { resim_ata=String.valueOf(i)+".gif"; resim=getImage(getCodeBase(),resim_ata); resimler_dizisi[i]=resim;} i=0;} //init metodunun sonudur.... public void paint(Graphics gra) { gra.drawImage(resimler_dizisi[i],100,50,null); i++; if (i==10) i=0; } //paint metodunun sonudur... public void start() { thread=new Thread(this); thread.start();} //start metodunun sonudur.... public void stop() { thread.stop();} //stop metodunun sonudur.... public void run() { while(true) { try { thread.sleep(700); } catch(InterruptedException e) {} repaint(); } } //run metodunun sonudur... }//animasyon appletinini sonudur... HandleEvent() yntemi gerekleen olayn id numarasn dikkate alarak agrr. Eer id mesela Event.MOUSE.UP ise handleEvent() yontemi mouseUP yntemini otomaikmen agrr. Bu diger alt yntemler iinde aynen gereklenir.handleEvent() yntemi aslnda bir st yntemdir. Ve diger alt yntemlere ulamaya yarar. HandleEvent() metodunun hiyerarik yaps aagdaki gibidir.

24

H A N D L E E V E N T ()

Event.MOUSE_ENTER mouseEnter(Event e,int x,int y)

Event.MOUSE_EXIT mouseExit(Event e,int x,int y) Event.MOUSE_MOVE mouseMove(Event e,int x,int y) Event.MOUSE_DOWN mouseDown(Event e,int x,int y) Event.MOUSE_DRAG mouseDrag(Event e,int x,int y) Event.MOUSE_UP mouseUp(Event e,int x,int y) Event.KEY_PRESS keyDown(evt e,evt.key) Event.KEY_ACTION keyDown(evt e,evt.key) Event.KEY_RELEASE keyUP(evt e,evt.key) Event.KEY_ACTION_RELEASE keyUp(evt e,evt.key) Event.ACTION_EVENT action(Event e,Object sonuc) Event.GOT_FOCUS gotFocus(event evt,Object sonuc) Event.LOST_FOCUS lostFocus(event evt,Object sonuc)

imdi bu alt yntemlerin ne ie yaradn bir grelim. mouseEnter(Event e,int x,int y) Mousun bileene girerken ki x ve y koordinatlar bulunabilir. mouseExit(Event e,int x,int y) Mousun bileeni terk ederken ki ki x ve y koordinatlar bulunabilir. mouseMove(Event e,int x,int y) Mousun eer hibir tuuna basmadan bileen zerinde hareket ettirirseniz mousun bileen zerindeki x ve y koordinatlarn bulabilirsiniz. mouseDown(Event e,int x,int y) Mousu eer devaml olarak basl tutarsanz mousun o anki bileen zerindeki x ve y koordinatlarn bulabilirsiniz. mouseDrag(Event e,int x,int y) Mousun devaml olarak basl tutarsanz ve hareket ettirirseniz mousun o anki bileen zerindeki x ve y koordinatlarn bulabilirsiniz. mouseUp(Event e,int x,int y) Mousu basl durumdan brakrsanz ekerseniz mousun o anki bileen zerindeki x ve y koordinatlarn bulabilirsiniz. keyDown(evt e,evt.key) Normal bir tua basld anlalr. keyUp(evt e,evt.key) Baslan normal tuun brakldgn gsterir. action(Event e,Object sonuc) Baz eylemlerin gereklendiini belirtir. Eylemin gereklendii bileen ve eylemin kendisi bu metodla anlalabilir. gotFocus(Event e,Object sonuc) Odaklanan bileeni gstermektedir. lostFocus(Event e,Object sonuc) Oda kaldrlm bileeni gstermektedir. imdi bu metodlarn en ok kullanlanlaryla ilgili rnekleri inceleyelim. Birinin kullanm anlalrsa digerlerin kullanmda anlalm olur. import java.awt.*; import java.applet.*; import java.awt.event.*; public class olay extends Applet { Label down,downxl,downyl,clicksayisi; Label up,upxl,upyl; Label move,movexl,moveyl; Label enter,enterxl,enteryl;

25

Label exit,exitxl,exityl; FlowLayout fl=new FlowLayout(FlowLayout.LEFT); public void init() { setLayout(fl); down=new Label("Mouse DOWN Olayinda----> "); downxl=new Label("X Koordinati...: "); downyl=new Label("Y Koordinati...: "); clicksayisi =new Label("Click Sayisi..: "); add(down); add(downxl); add(downyl); add(clicksayisi); up=new Label("Mouse UP Olayinda----> "); upxl=new Label("X Koordinati...: "); upyl=new Label("Y Koordinati...: "); add(up); add(upxl); add(upyl); move=new Label("Mouse MOVE Olayinda----> "); movexl=new Label("X Koordinati...: "); moveyl=new Label("Y Koordinati...: "); add(move); add(movexl); add(moveyl); enter=new Label("Mouse ENTER Olayinda----> "); enterxl=new Label("X Koordinati...: "); enteryl=new Label("Y Koordinati...: "); add(enter); add(enterxl); add(enteryl); exit=new Label("Mouse EXT Olayinda----> "); exitxl=new Label("X Koordinati...: "); exityl=new Label("Y Koordinati...: "); add(exit); add(exitxl); add(exityl); }//init metodunun sonudur.... public boolean mouseDown(Event e,int x,int y) {//mouse basl durumda... downxl.setText("X Koordinati...: " + x); downyl.setText("Y Koordinati...: " + y); clicksayisi.setText("Click Sayisi.: " + e.clickCount); showStatus("aloo..: "+e.id); return true; }//mouseDown metodunun sonudur... public boolean mouseUp(Event e,int x,int y) { //mouse cekili durumda... upxl.setText("X Koordinati...: " + x); upyl.setText("Y Koordinati...: " + y); showStatus("aloo..: "+e.id); return true; }//mouseUp metodunun sonudur... public boolean mouseMove(Event e,int x,int y) { //mousun hi bir tusuna basmadan hareket ettirilmesi... movexl.setText("X Koordinati...: " + x); moveyl.setText("Y Koordinati...: " + y); return true; }//mouseMove metodunun sonudur... public boolean mouseEnter(Event e,int x,int y) { //mausun bileene girerkenki konumu.. enterxl.setText("X Koordinati...: " + x); enteryl.setText("Y Koordinati...: " + y); return true;} //mouseEnter metodunun sonudur... public boolean mouseExit(Event e,int x,int y) { //mausun bileene karkenki konumu.. exitxl.setText("X Koordinati...: " + x); exityl.setText("Y Koordinati...: " + y); return true; } //mouseEnter metodunun sonudur... } //olay appletin sonudur.... kinci program orneide handleEvent() st metodunun kullanm ile ilgilidir.

26

import java.awt.*; import java.applet.*; import java.awt.event.*; public class olay2 extends Applet { Label lid1=new Label("Su anda - - nolu islemi yapiyorsunuz"); Label lid2=new Label(""); Button b1=new Button("Ben Buton-1-"); Button b2=new Button("Ben Buton-2-"); Button b3=new Button("Ben Buton-3-"); Button b4=new Button("Ben Buton-4-"); char chr; public void init() { setLayout(new FlowLayout(FlowLayout.LEFT)); add(b1); add(b2); add(b3); add(b4); add(lid1); add(lid2); }//init metodunun sonudur... public boolean handleEvent(Event e) { lid1.setText("Su anda -"+e.id+" - nolu islemi yapiyorsunuz"); if (e.id==Event.ACTION_EVENT) { showStatus("argman...: " + e.arg); } if (e.id==Event.MOUSE_DOWN) { lid2.setText("x Koordinati...: "+e.x+" Y Koordinati...: "+e.y); } return true;} //handleEvent n sonudur... } //olay2 applet snfnn sonudur... Aagdaki kodda keyDown metodu ile ilgili gzel bir rnektir. Bu kod baslan tuu applette gstermekte ve eer baslan tular yn tular ise bu karakteri appletin istediimiz bir yerine tamaktadr. keyUp metodunun kullanm keyDown mtodu ile ayndr. kisinin arasndaki fark ise keyDown metodu tua basl tutarsanz aktif hale gelmekte , keyUp metodu ise baslan tuu ektiinizde aktif olmaktadr. import java.awt.*; import java.applet.*; import java.awt.event.*; public class olay3 extends Applet { char basilan_karakter; int yerx,yery; public void init() { yerx=(size().width/2)-8; yery=(size().height/2)-16; }//init metodunun sonudur... public boolean keyDown(Event e,int key) { //tua basldn gsterir. showStatus("Baslan tuun asc kodu.: " + key); switch(key) { case(Event.DOWN): yery+=7; break; case(Event.UP): yery-=7; break; case(Event.LEFT): yerx-=7; break; case(Event.RIGHT): yerx+=7; break; default: basilan_karakter=(char)key; } repaint(); return true; } //keyDown metodunun sonudur...

27

public void paint(Graphics graf) { if(basilan_karakter!=0) { graf.drawString(String.valueOf(basilan_karakter),yerx,yery); }} //paint metodunun sonudur... }//olay3 applet snfnn sonudur... GRAFK drawLine(int x1,int y1,int x2,int y2) x1,y1 den x2,y2 ye cizgi izilir. import java.awt.*; import java.applet.*; public class grafik1 extends Applet { public void paint(Graphics graf) {graf.drawLine(25,25,75,75); }//main ana blogun sonudur... }//grafik1 appletin sonudur.... drawRect(int x1,int y1,int width,int height) Bir drtgen izer. Drtgenin st sol keleri x1,y1 dir. Buradan belirtilen genilik ve ykseklikte drtgeni izer. rnegin : graf.drawRect(25,25,75,75); fillRect(int x1,int y1,int width,int height) Bir drtgen izer. Ancak izilen drtgeni setColor la belirtilen renkle boyar. Drtgenin st sol keleri x1,y1 dir. Buradan belirtilen genilik ve ykseklikte drtgeni izer. drawRoundRect(int x,int y,int width,int height,int arcWidth,int arcHeight) Bir drtgen izer. Burada arcWidth parametresi drt ke zerinde yayn yatay ap , int arcHeight parametresi ise drt ke zerindeki yayn dikey apdr. fillRect(int x,int y,int width,int height,int arcWidth,int arcHeight) Bir drtgen izer. Burada arcWidth parametresi drt ke zerinde yayn yatay ap , int arcHeight parametresi ise drt ke zerindeki yayn dikey apdr. DrawRoundRect metodundan tek fark ii boyaldr. drawOval(int x1,int y1,int width,int height) x,y,width,height parametreleriyle belirtilen drtgene uyacak ekilde bir daire izer. fillOval(int x1,int y1,int width,int height) x,y,width,height parametreleriyle belirtilen drtgene uyacak ekilde bir daire izer. Ancak ii setColor le set edilen renge boyalar. drawArc(int x1,int y1,int width,int height,int startangle,int arcAngle) Daire yahut elips izilir. x,y yayn merkezidir. Height yksekligi,width ise geniliidir. Startangle balang acs,arcanglede yayn asdr. fillArc(int x1,int y1,int width,int height,int startangle,int arcAngle) Daire yahut elips izilir. Ama setColor la onceden belirlenmi renkte izer. YAZI , RENK,FONT KONTROL Graphics snf kullanarak applete yahut frameye yaz yazmak istedigimizde drawString() alt metodu kullanlr. drawString(String string,int x,int y) string parametresi ile belirtilen stringi appletin yahut framenin x,y koordinatlarnda gsterir. import java.awt.*; import java.applet.*; public class grafik1 extends Applet { public void paint(Graphics graf) { graf.drawString("Java Bir Harika",25,50); }//main ana blogun sonudur... }//grafik1 appletin sonudur.... Bu kod 25.stun 50.satra (bu degerler piksel degerleridir) Java Bir Harika yazacaktr. Bu yazm olduumuz yaznn rengini deitirmek iinse Color snf kullanlr. Color snfda tpk Graphics snf gibi java.awt. nin bir alt snfdr (java.awt.Color) import java.awt.*; import java.applet.*; public class grafik1 extends Applet { public void paint(Graphics graf) { graf.setColor(Color.blue);

28

graf.drawString("Java bir Harika",25,50); }//main ana blogun sonudur... }//grafik1 appletin sonudur.... Burada setColor(Color.blue) ile renk seiminde bulunuyoruz. Standart renkleri bu ekilde kullanabiliriz. Standart renkler white,red,gray,black,darkGray,blue,yellow,cyan,pink,orange vs.vs.vs. Javada renklerin kontrol krmz,yeil,mavi renklerinin karmlar eklinde elde edilmektedir. yleki yukardaki rnegi u ekilde yapalm. import java.awt.*; import java.applet.*; public class grafik1 extends Applet { public void paint(Graphics graf) { Color renk=new Color(50,150,100); //Color (red,green,blue) graf.setColor(renk); graf.drawString("Java bir Harika",25,50); }//main ana blogun sonudur... }//grafik1 appletin sonudur.... Tm appletin yada framenin zemin rengini deitirmekte mmkn. Bunun iin u metodlar kullanlr. setBackground(Color.green) yada setBackground(10,200,40) Yazm olduumuz yaznn fontunu deitirmekte mmkn. Bunun iin Font snf kullanlr. Font snfda tpk Graphics snf ve Color snf gibi java.awt. nin bir alt snfdr (java.awt.Font) Font snf u ekilde kullanlr: Font(String font_name,int style,int size) Bu parametreleri ve bunlarn alabilecekleri deerleri anlatlrsa: font_name...: Fontun ad belirtilir. Alacag deerler : TimesRoman,Courier,Sysbol,Dialog,Helvetica ..... style............: Kullanlacak stil. Alacag degerler Font.BOLD (kaln stil) , Font.ITALIC (italic stil) , Font.PLAIN (normal stil) size.............: Yaznn bykl belirtilir. Aagda font snfnn kullanm ile ilgili bir kod vardr. import java.awt.*; import java.applet.*; public class grafik1 extends Applet { public void paint(Graphics graf) { Color renk=new Color(100,150,200); Font kalin_font=new Font("TimesRoman",Font.BOLD,40); graf.setColor(renk); graf.setFont(kalin_font); graf.drawString("Java bir Harika",25,50); }//main ana blogun sonudur... }//grafik1 appletin sonudur.... RESM EKLEMEK Javada applete,frameye resim eklemek(resimle almak-resim gstermek) iin Image snf kullanlr. Bu snfn kurucusu Image() dr. Aagda bu konuyla ilgili bir ornek bulunmaktadr. import java.awt.*; import java.applet.*; public class grafik1 extends Applet { Image resim; public void paint(Graphics graf) { resim=getImage(getCodeBase(),"spor.gif"); graf.drawImage(resim,50,50,this); }//main ana blogun sonudur... }//grafik1 appletin sonudur.... HTML JAVA CGI VRML SGML W.R. STANEK Sistem Yaynclk, ISBN : 9753220111 Kitapta birok konu ilendii iin Java'ya fazla deinilmemi. Java hakknda kltrel bilgi veriliyor. Benim Java'nn detayna ihtiyacm yok sadece nedir ne deildir reneyim diyorsanz bu kitap size gre, ayrca

29

HTML,CGI gibi konularda da bilgi sahibi olursunuz. Java Grup Java Beta Yaynevi Java'ya yeni balamsanz, bu kitap tam size gre. erii fazla geni deil. Balang dzeyinde olan bu kitap sade bi anlatma sahip. Fazla ayrntya girilmemi, zaten kitabn yarsndan fazlasda rneklerle doldurulmu. Bu rneklerin aklamas yok. Kitap Java 1.02 'yi baz alm. Java konusunda, trke ierikli ve trkler tarafndan yazlm ilk kitap nvanna sahip. Java'ya yeni balyorsanz bu kitap size Java'nn temellerini retecektir. Ama fazla birey beklemeyin. Java 1.1 Programlama Klavuzu ( CD'li ) Sybex ( eviri ) Alfa yaynevi Bu kitap daha ok Java ile daha nceden har neir olmular iin. Java temel bilgisi olduu varsaylarak konular anlatlm. Java 1.1 ierisinde bulunan Servletlar, Beanler, Rmi, Javadoc gibi hemen hemen her konuya deinilmi. Ayrca kitabn sonunda Java snf ktphanelerinin ierii, ok sk sorulan sorularda var. Java'nn temellerini biliyorsanz, trke ierikli en iyi kitap.

Yararl Java Scriptler:


1)Bir kelimeyi link haline dntrdnzde kelimenin altn izili olarak grmekten bktysanz ve bu durumdan kurtulmak istiyorsanz aada verilen yazlm sayfanza <head> </head> arasna ekleyiniz . . . <style> <!-.bold { font-family: Arial; font-size: 10pt; color: 8080FF; font-weight: bold } .normal { font-family: Arial; font-size: 8pt; color: CFCFCF } .header { font-family: Verdana, Arial; font-size: 14pt; color: BFBFFF; font-weight: bold } td { font-family: Arial;} a:link, a:active, a:visited {text-decoration: none;} a:hover {color: EAEAFF; text-decoration: none;} --> </style> 2)Sayfanzda istediiniz gibi trke karakter kullanmak istiyorsunuz fakat browserler farkl karakterler gsteriyorsa sayfanzn <head> </head> arasna u cmleyi ekleyin. . . <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-9"> 3)Sayfanzn giriinde ziyaretiye bir mesaj vermek ve bunun iinde kk bir uygulama penceresi almasn istiyorsunuz,ite o zaman verilen yazlm sayfanzda dilediiniz yere ekleyin. . . <script language="JavaScript"> alert("yi Gezintiler ve uradnz iin teekkurler"); </script> 4) Yaz,icon ,frame vb. bir blm sayfanzda gizlemek ve belirli linklere baslmak suretiyle grnp kaybolmasn istiyorsanz buyrun bu yazlm kullann. . . <DIV id="bodyframe" style="VISIBILITY: hidden"><b>Sir Volt Home Page</b></DIV> <div style="BACKGROUND-COLOR: red; CURSOR: hand; LEFT: 400px; POSITION: absolute; TOP: 330px; WIDTH:75px; Z-INDEX: 1" onclick="document.all.bodyframe.style.visibility='visible'">Yaziyi goster</div> <div style="BACKGROUND-COLOR: green; CURSOR: hand; LEFT:

30

300px; POSITION: absolute; TOP: 330px; WIDTH: 75px; Z-INDEX: 1" onclick="document.all.bodyframe.style.visibility='hidden'">Yaziyi gizle</div> 5)Linklerin zerine gelindiinde el yerine art iaretini grmek istiyorsanz ite bu yazlm kullann ve link cumlesini byle deitirin <A href="nebiliiim.html" style="CURSOR: crosshair" >Art</A>

31

You might also like