Re: [Linux-programlama] Java applet ClassNotFoundException

---------

New Message Reply About this list Date view Thread view Subject view Author view Attachment view

From: Bora Güngören (bora@boragungoren.com)
Date: Sat 17 Sep 2005 - 13:19:32 EEST


Merhaba,

Problemi görünce oldukça neşelendim. Çünkü Portakal Teknoloji'nin JAV130
eğitiminde kullandığımız bir "hata örneği"ni kendiniz keşfetmişsiniz.
:-) Sorunun çözümüne gelince.

Bir görsel bileşenin (ki Applet sınıfları da görsel bileşendir) kendi
kodları içerisinde uyuma/uyanma mekanizmasını kullanacak olursanız
görsel bileşen nesnesi şletim sistemi ve dolayısı ile Swing yönetici
kanalının mesajlarına tepkisiz kalır. Şöyle düşünün ekranınız saniyede
60 kez yeniden boyanıyor (60Hz'in anlamı o) ve sizin kanalınız her
saniyenin çok büyük bir kısmında uykuda olduğu için bu bileşen ve içinde
bulunduğu barındırıcı (tüm JFrame) yeniden boyamalarda çalışmıyor.

Yapmanız gereken uyuma/uyanma işlemlerini ayrı bir kanalda yapmanız.
Yani main() yöntemi içinde sistemde iki kanal olacak ve aşağıdaki
biçimde başlatılacak.

//.. kanallar yaratılıyor.
SwingUtilities.invokeAndWait(
gorselBilesenleriYaratanVeEkrandaGosterenKanal );
int oncelik =
gorselBilesenleriYaratanVeEkrandaGosterenKanal.getPriority() - 1 ;
uyumaUyanmaTuruFaaliyetleriGerceklestiripGorselBilesenleriGuncelleyenKanal.setPriority(oncelik);

uyumaUyanmaTuruFaaliyetleriGerceklestiripGorselBilesenleriGuncelleyenKanal.start();

// main gerekliyse sona erebilir.

Yıl sonuna doğru çıkacak olan üçüncü Java kitabımda da bu türde bir iki
Applet / Swing örneği bulunacak.

İyi Çalışmalar.

Bora Güngören.

Ali Dereli wrote:

> Merhaba;
>
> fikir veren herkese tesekkurler ama öyle bir sorunum varki halledipte
> söylediklerinize bakamadım bile.
>
> Bu tarz basit sorunları listeye yansıtmayı sevmiyorum ama bazen hatayı
> görecek baska bir cift göze ihtiyacı duyuyorum. Gelelim soruna
> yazdıgım programın hem web tabanlı hemde consoldan calısmasını
> istiyorum. Geneldede bunda başarılı oluyorum. İstisnalar haric tabi.
> Zamanımı götürende bu istisnalar. Kod üzerinde anlatıyım.
>
>
> public class eylul16 extends JApplet {
> static protected JLabel label;
> eylul16Panel panel;
>
> public void init(){
> getContentPane().setLayout(new BorderLayout());
> panel = new eylul16Panel();
> getContentPane().add("Center",panel);
> label = new JLabel("");
> getContentPane().add("South", label);
> }
> public static void main(String s[]) {
> JApplet applet = new eylul16();
> JFrame f = new JFrame("......");
> f.addWindowListener(new WindowAdapter() {
> public void windowClosing(WindowEvent e) {System.exit(0);}
> });
> f.getContentPane ().add(applet, BorderLayout.CENTER);
> applet.init();
> f.setSize(new Dimension(1000,600));
> f.setVisible(true);
> }
> }
>
> yukarda klasik bi kod örnegi var burda sorun oldugunu zannetmiyorum.
> eylul16 sınıfından türeyen nesneyi frame'e ekliyorum. sorun 16eylul
> sınıfında (tabi bence).
> sınıfın yapması gereken 1 saniyede bir ekrana yazı yazdırması. ama run
> içerisinden repaint() dememe ragmen paintcomponent calısmıyor.
> iste istisna dememdeki neden de bu. consoldan calısıyor. appletların
> bilmedigim bi özelligi var o yüzden calısmıyor desem baska applet
> programlarımda da calısıyor ama bu calısmıyor.
>
> class eylul16Panel extends JPanel implements Runnable{
> BufferedImage bi;
> Graphics2D big;
> String kelime=".............";
> float xde=0;
> int w=900;
> int h=500;
> boolean firstTime = true;
> Thread t;
> public eylul16Panel( ){
> super(null);
> System.out.println("yapılandırıcı");
> t = new Thread(this);
> t.start();
> }
> public void run() {
> while(true){
> try{
> t.sleep(1000);
> }
> catch(Exception ex){
> System.out.println("hata olustu" + ex);
> }
> xde=xde+10;
> System.out.println("run cagrısı");
> repaint();
> System.out.println("run cagrısı2");
> }
> }
> public void paintComponent(Graphics g){
> super.paintComponent(g);
> System.out.println("paint komponent");
> update(g);
> }
> public void update(Graphics g){
> System.out.println("update");
> Graphics2D g2 = (Graphics2D)g;
> if(firstTime){
> bi=(BufferedImage) createImage(w,h);
> big=bi.createGraphics();
> big.setBackground(Color.LIGHT_GRAY);
> big.setColor(Color.white);
> big.setPaint(Color.BLUE);
> big.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
> RenderingHints.VALUE_ANTIALIAS_ON);
> firstTime = false;
> }
> big.clearRect(0, 0,w, h);
> big.drawString(kelime, xde , 100);
> big.setPaint(Color.darkGray);
> big.setStroke(new BasicStroke(7.0f));
> big.draw(new Rectangle(15,15,w-40,h-40));
> g2.drawImage(bi, 30, 30, this);
> }
> }
>
>
>
> browserın java consolunda söyle bir cıktı oluyor:
> run cagrısı
>
> run cagrısı2
>
> run cagrısı
>
> run cagrısı2
>
>
>------------------------------------------------------------------------
>
>_______________________________________________
>Linux-programlama mailing list
>Linux-programlama@liste.linux.org.tr
>http://liste.linux.org.tr/mailman/listinfo/linux-programlama
>

_______________________________________________
Linux-programlama mailing list
Linux-programlama@liste.linux.org.tr
http://liste.linux.org.tr/mailman/listinfo/linux-programlama


New Message Reply About this list Date view Thread view Subject view Author view Attachment view

---------

Bu arsiv hypermail 2.1.2 tarafindan uretilmistir.