Swing - Fehler - Paint Methode

Feeder

Bekanntes Mitglied
Hey,

komischer Weise wird "Test" nie ausgegeben. (siehe Code Bilder)
Die Main-Loop läuft wie geschmiert. Leider scheint aber repaint nicht paint() auszulösen.

Mfg Suchty
 

Anhänge

  • Bildschirmfoto 2019-01-02 um 20.04.02.png
    Bildschirmfoto 2019-01-02 um 20.04.02.png
    191 KB · Aufrufe: 37
  • Bildschirmfoto 2019-01-02 um 20.04.31.png
    Bildschirmfoto 2019-01-02 um 20.04.31.png
    160,5 KB · Aufrufe: 42
Warum denn bitte Screenshots... Schreib den Code doch bitte in code Tags.
Das erlaubt es Leuten, den Code zu kopieren und selbst auszuprobieren und somit eventuell den Fehler zu reproduzieren und zu beheben.
 
Funktioniert so: [code=Java]Dein Code[/code]

Abgesehen davon: nimm das static bei GameEnded raus und halte Dich an Benennungskonventionen von Java (-> gameEnded).

Dann: wenn Du keinen LayoutManager verwendest, dann musst Du Lage und Größe der Komponente auch angeben (panel.setBounds(...)) Außerdem gilt, setVisible am Schluss.

Wozu das GamePanel ein Game bekommt, ist mir auch nicht klar - und warum in paintComponent ein try-catch notwendig ist, schon gar nicht.
 
Funktioniert so: [code=Java]Dein Code[/code]

Abgesehen davon: nimm das static bei GameEnded raus und halte Dich an Benennungskonventionen von Java (-> gameEnded).

Dann: wenn Du keinen LayoutManager verwendest, dann musst Du Lage und Größe der Komponente auch angeben (panel.setBounds(...)) Außerdem gilt, setVisible am Schluss.

Wozu das GamePanel ein Game bekommt, ist mir auch nicht klar - und warum in paintComponent ein try-catch notwendig ist, schon gar nicht.
Hey, ja an der Lage lag es.
ich habe jetzt die folgenden Klassen:

Java:
package rlgame;

import javax.swing.JFrame;

public class Game {
    public boolean gameEnded = false;
    public Simulation sim;
    GamePanel panel;
    JFrame frame;
    public static void main(String[] args) {
        new Game();
    }
    public Game() {
        init();
        startLoop();
    }
    private void startLoop() {
        long lasttime = System.currentTimeMillis();
        while(!gameEnded) {
        double deltatime = -(double)(lasttime - System.currentTimeMillis())/1000;
        sim.update(deltatime);
//        System.out.println(1/deltatime);
        lasttime = System.currentTimeMillis();
        frame.repaint();

        }
      
    }
    private void init() {
        frame = new JFrame("RLGame");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(1000, 1000);
        frame.setVisible(true);
        frame.setResizable(false);
        sim = new Simulation(this);
        panel = new GamePanel(this);
        panel.setSize(1000,1000);
        frame.add(panel);
      
    }

}

Java:
package rlgame;

import java.awt.Graphics;

import javax.swing.JPanel;

public class GamePanel extends JPanel{
    Game game;
    int i = 0;
    public GamePanel(Game game) {
        this.game = game;
    }
    @Override
    public void paint(Graphics g) {
        // TODO Auto-generated method stub
        System.out.println(i++);
        game.sim.p.display(g);
        for(GameObject o : game.sim.gobjects) {
            try {
                o.display(g);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

unglücklicherwiese scheint das repaint nur 3x die Sekunde zu zeichnen, was wie ihr sicherlich wisst, nervt.
 
Was macht den / was ist denn "Simulation" ?
Überschreib bitte paintComponent(Graphics) und nicht paint(Graphics)
Dann sind immer noch die Fragen von @mihe7 offen. Wieso der try-catch Block in der paintComponent-Methode?
 
Hey, danke für eure Antwort. Der Fehler war tatsächlich die Size des Layers. Der trycatch Block kam durch ein Decompiler...
 

Neue Themen


Zurück
Oben