Portal > Foren > Java > Desktop-Applikationen und Grafik > Warum wird die run()-Methode nicht aufgerufen?
Antwort
 
Themen-Optionen
Alt 09.02.2006, 11:52 Nach oben    #1
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.471
Standard Warum wird die run()-Methode nicht aufgerufen?

Hi,
also ich habe jetzt ein wirklich simples Beispiel konstruiert.
Ein Thread in einem Applet (ja, ich weiß, dass es da Probleme geben kann .. auch wenn ich noch nicht so ganz dahintergekommen bin, wie man das am besten löst .. ist aber nicht die Frage. Vielleicht später!).

Okay. Hier mal der Quelltext.
Java Code:
  1. /**
  2. * @author Ben
  3. * @version 1.0
  4. * @since 09.02.2006
  5. * @package applets
  6. * @project Scriptarchiv
  7. */
  8.  
  9. import java.awt.*;
  10. import javax.swing.*;
  11.  
  12. public class AppletTest extends JApplet implements Runnable {
  13.    
  14.    
  15.     private int a = 10, b = 10, c = 10, d = 10;
  16.     private Thread thread;
  17.    
  18.    
  19.     public void start() {
  20.         this.thread = new Thread();
  21.         this.thread.start();
  22.     }
  23.    
  24.    
  25.     public void init() {
  26.         this.setSize(500,500);
  27.         this.setBackground(Color.LIGHT_GRAY);
  28.     }
  29.    
  30.    
  31.     public void run() {
  32.        
  33.         while(true) {
  34.             this.a += 5;
  35.             this.b += 5;
  36.             this.c += 5;
  37.             this.d += 5;
  38.  
  39.             repaint();
  40.            
  41.             try {
  42.                 Thread.sleep(1000);
  43.             } catch(InterruptedException ex) {
  44.             }
  45.         }
  46.     }
  47.    
  48.    
  49.     public void paint(Graphics g) {
  50.         Graphics2D g2d = (Graphics2D)g;
  51.        
  52.         g2d.drawRect(this.a,
  53.                      this.b,
  54.                      this.c,
  55.                      this.d);
  56.     }   
  57.  
  58. }

Die run()-Methode wird nicht aufgerufen. Im Appletviewer wird mir also das Rechteck an den Ausgangskoordinaten angezeigt, aber dann wird es nicht "verschoben", weil durch den Nichtaufruf von run() auch kein repaint() aufgerufen wird.
Mäh .. ich steh hier voll auf dem Schlauch.

Warum geht das denn nicht?

Danke für Eure Antworten.
Grüße Ben.


EDIT:
Java Code:
  1. this.thread = new Thread(this);
Da lag der Fehler.


EDIT:
Und für diejenigen, die etwas zum Testen brauchen .. hier nochmal inklusive Ausgabepufferung zur Vermeidung des Flackerns bei der Aktualisierung der Anzeige.
Java Code:
  1. /**
  2. * @author Ben
  3. * @version 1.0
  4. * @since 09.02.2006
  5. * @package applets
  6. * @project Scriptarchiv
  7. */
  8.  
  9. import java.awt.*;
  10. import javax.swing.*;
  11.  
  12. public class AppletTest extends JApplet implements Runnable {
  13.    
  14.    
  15.     private int a = 10, b = 10, width = 10, height = 10;
  16.     private Thread thread;
  17.    
  18.     private Image bufferedImage;
  19.     private Graphics2D bufferedGraphics;
  20.    
  21.    
  22.     public void start() {
  23.         this.thread = new Thread(this);
  24.         this.thread.start();
  25.     }
  26.    
  27.    
  28.     public void init() {
  29.         this.setSize(500,500);
  30.         this.setBackground(Color.LIGHT_GRAY);
  31.     }
  32.    
  33.    
  34.     public void run() {
  35.        
  36.         while(true) {
  37.             this.a += 5;
  38.             this.b += 5;
  39.  
  40.             repaint();
  41.            
  42.             try {
  43.                 Thread.sleep(1000);
  44.             } catch(InterruptedException ex) {
  45.             }
  46.         }
  47.     }
  48.    
  49.    
  50.    
  51.     public void paint(Graphics g) {
  52.         Graphics2D g2d = (Graphics2D)g;
  53.    
  54.         g2d.drawRect(this.a,
  55.                      this.b,
  56.                      this.width,
  57.                      this.height);
  58.     }   
  59.  
  60.    
  61.     public void update(Graphics g) {
  62.        
  63.         Graphics2D g2d = (Graphics2D)g;
  64.        
  65.         if (this.bufferedImage == null) {
  66.             this.bufferedImage    = createImage(this.getSize().width, this.getSize().height);
  67.             this.bufferedGraphics = (Graphics2D)this.bufferedImage.getGraphics();
  68.         }
  69.        
  70.         this.bufferedGraphics.setColor(this.getBackground());
  71.         this.bufferedGraphics.fillRect(0, 0, this.getSize().width, this.getSize().height);
  72.         this.bufferedGraphics.setColor(this.getForeground());
  73.        
  74.         this.paint(this.bufferedGraphics);
  75.        
  76.         g2d.drawImage(this.bufferedImage, 0, 0, this);
  77.     }
  78.    
  79. }

Geändert von Ben (09.02.2006 um 12:58 Uhr).
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[AJAX] Eine Einführung in AJAX und XMLHttpRequest Jay Tutorials 1 08.12.2006 16:21
PHPeclipse - herausfinden, wo eine Methode aufgerufen wird Ben Eclipse 3 12.03.2006 22:46
Lange Methode blockiert UI Sayang Allgemeine Java-Programmierung 11 07.03.2006 22:43
statische Methode per Reflection aufrufen ehli75 Allgemeine Java-Programmierung 2 02.02.2006 13:17
Methode in der main aufrufen, unterschied JApplet und JFrame Gottzilla Desktop-Applikationen und Grafik 3 10.03.2005 10:12


Alle Zeitangaben in WEZ +2. Es ist jetzt 20:59 Uhr.


Powered by vBulletin® Version 3.7.3 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44