Fenster akutaliesiert sich nicht

Status
Nicht offen für weitere Antworten.

Reality

Top Contributor
Hi,
mysteriöserweise aktualisiert sich nicht das (Vollbild)Fenster. Ich sehe einfach nur einen blauen Hintergrund und nicht mal die Aufschrift "Hello World". Wenn ich die while-Schleife in der run-Methode entferne, sieht man den String (, aber er bewegt sich eben nicht. 😉 ).
Was ist falsch?

Code:
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;

public class Main extends JFrame implements Runnable{
  final static FullScreen fullScreen = new FullScreen();
  static boolean play = true;
  int x = 0;
  int y = 20;

  private Graphics dbg;
  private Image img;

  Thread t = new Thread(this);

  public static void main(String[] args) {
    Main window = new Main();

    window.addKeyListener(new KeyAdapter(){
    public void keyPressed(KeyEvent ke){
      if(ke.getKeyCode() == KeyEvent.VK_ESCAPE){
        fullScreen.restoreScreen();
        play = false;
      }
    }
    });

    window.runGame();
  }

  void runGame(){
    setBackground(Color.BLUE);
    setForeground(Color.WHITE);
    setFont(new Font("Dialog", Font.PLAIN, 20));

    DisplayMode displayMode;
    displayMode = new DisplayMode(1024, 768, 32, DisplayMode.REFRESH_RATE_UNKNOWN);

    fullScreen.setFullScreen(displayMode, this);

    t.start();
  }

  public void paint(Graphics g){
    if(g instanceof Graphics2D){
      Graphics2D g2 = (Graphics2D) g;
      g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
                          RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
    }


    g.drawString("Hello World", x, y);
  }

  public void update(Graphics g){
    if(img == null){
      img = createImage(1024, 768);
      dbg = img.getGraphics();
    }

    dbg.setColor(getBackground());
    dbg.fillRect(0, 0, 1024, 768);

    dbg.setColor (getForeground());
    paint(dbg);
    g.drawImage(img, x, y, this);
  }

  public void run(){

    while(play){
      t.setPriority(Thread.MIN_PRIORITY);
      x++;
      try{
        Thread.sleep( 20 );
      }
      catch( InterruptedException ex ){}

      t.setPriority(Thread.MAX_PRIORITY);
      repaint();
    }

  }
}

Liebe Grüße
Reality
 
Wahrscheinlich saugt dieser zweite Thread die ganzen Ressourcen auf, und lässt niemandem mehr die Zeit was
zu zeichnen.

Versuch mal den zweiten Thread kurz zu pausieren:
Code:
  public void run(){

    while(play){
      x++;
      repaint();

      try{
        Thread.sleep( 20 );
      }
      catch( InterruptedException ex ){}
    }
  }
 
Hi Beni!
Danke! 🙂

Jetzt taucht ein seltsamer Fehler auf! Der String wandert einfach ca. 20 Pixel weiter runter und läuft erst dann der x-Achse entlang.
Und das alte Hello World bleibt stehen!
2 Dinge die nicht beabsichtigt waren.

Den neuen Code findest du in meinem ersten Beitrag. Ich hab ihn editiert.

Hier der Screenshot:
http://mitglied.lycos.de/masterchan/UF.GIF

Liebe Grüße
Reality
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben