Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Luca

Treue Seele

  • »Luca« ist der Autor dieses Themas

Beiträge: 188

Wohnort: Braunschweig

  • Private Nachricht senden

1

07.04.2013, 21:51

Java Programm startet nicht im Debug, aber im Run Modus

Hallo zusammen!

Ich habe ein kleines Problem mit meinem Java Programm. Wenn ich es starte, wird mir angezeigt, es sei ein Fehler aufgetreten und die Datei (Display(1).java) kann nicht gestartet werden. Der Debugmodus liefert jedoch kein Ergebnis! Wenn ich nun das Programm aber mit der Run Taste starte, läuft es einwandfrei?! Wieso das? Hier ein Screenshot vom Debugger

http://s7.directupload.net/file/d/3218/gbdlx2co_jpg.htm

Kann mir das bitte jemand erklären?

Meine Screen Klasse sieht wie folgt aus:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package graphics;

import java.util.Random;

public class Screen extends Render {

    private Render test;
    
    public Screen(int width, int height) {
        super(width, height);
        Random random = new Random();
        test = new Render(256, 256);
        for(int i = 0; i < 256*256; i++) {
            test.pixels[i] = random.nextInt();
        }
    }

    public void render() {
        draw(test, 0, 0);
    }

}



Gruß,
Luca

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

08.04.2013, 06:44

Mal vom eigentlichen Problem abgesehen (welches ich in falschen Run-Configs vermute), was genau ist das?

Quellcode

1
2
3
public class Screen extends Render {

    private Render test;

Ein Screen ist ein Render und hat ein (eine? einen?) Render? Was genau ist ein Render überhaupt, das Wort kenne ich nur als Baumaterial (Putz) oder als Verb.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

3

08.04.2013, 08:40

Abgesehen davon, das ich auf dem Screenshot nirgendswo den erwaehnten Fehler sehe: Waere es nicht moeglich sowas hier als Anhang einzustellen, wenn man keinen ordentlichen Platz zum Upload hat?

Luca

Treue Seele

  • »Luca« ist der Autor dieses Themas

Beiträge: 188

Wohnort: Braunschweig

  • Private Nachricht senden

4

08.04.2013, 14:57

ja, das stimmt. Habe die upload Funktion übersehen. Man kann allerdings heranzoomen, falls es am erkennen des Bildes liegt. Die Render Klasse soll später dazu da sein, das entsprechende Bild zu rendern. Die Bezeichnung spielt ja auch in erster Linie keine Rolle allerdings wundert es mich eben, weshalb der Debugger mir die Zeile screen = new Screen (HEIGHT, WIDTH); markiert? Was ist denn bei dieser Zeile falsch?

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

5

08.04.2013, 15:16

Vielleicht einfach mal Bedienungsanleitung lesen?

allerdings wundert es mich eben, weshalb der Debugger mir die Zeile screen = new Screen (HEIGHT, WIDTH); markiert?
Das es die Zeile auf die der PC zeigt.

Was ist denn bei dieser Zeile falsch?
Ich kenne dein Programm nicht, aber vielleicht nichts?

Luca

Treue Seele

  • »Luca« ist der Autor dieses Themas

Beiträge: 188

Wohnort: Braunschweig

  • Private Nachricht senden

6

08.04.2013, 16:37

Mir ist schon klar, was der Debugmodus macht. Allerdings war es sonst immer so, dass Eclipse mein Programm gestartet hat, wenn ich den Debugmodus gestartet habe. Wenn etwas falsch war, also der Code irgendwo einen Fehler besaß, dann wurde die Debugperspektive geöffnet und mir wurde die Zeile markiert, in den ich den Fehler zu vermuten hatte.

Aber wie du eben schon gesagt hast, ist in dieser Zeile kein Fehler. Ich dachte eigentlich es hätte was mit den Einstellungen zu tun, obwohl ich daran nicht geändert habe. Ich stelle noch einmal mein komplettes Programm hoch. Ich will eigegntlich nur wissen, wieso der Debugger mein Programm nicht startet und immer diese Zeile markiert. ^^

Display.java:

Quellcode

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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
import java.awt.Canvas;
import java.awt.Graphics;
import java.awt.image.BufferStrategy;
import java.awt.image.BufferedImage;
import java.awt.image.DataBufferInt;

import javax.swing.JFrame;

import graphics.Render;
import graphics.Screen;

public class Display extends Canvas implements Runnable {   
    private static final long serialVersionUID = 1L;
    
    public static final int WIDTH  = 800;
    public static final int HEIGHT = 600;
    public static final String TITLE = "Singularity Pre-Alpha 0.01";
    
    private Thread thread;
    private Screen screen;
    private BufferedImage img;
    private Render render;
    private boolean running = false;
    private int[] pixels;
    
    public Display() {
        screen = new Screen(WIDTH, HEIGHT);
        img = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
        pixels = ((DataBufferInt)img.getRaster().getDataBuffer()).getData();
    }
    
    private void start() {
        if(running) return;
        running = true;
        thread = new Thread(this);
        thread.start();
    }
    
    private void stop() {
        if(!running) return;
        running = false;
        try {
            thread.join();
        } catch (Exception e) {
            e.printStackTrace();
            System.exit(0);
        }
    }
    
    public void run() {
        while(running) {
            update();
            render();
        }
    }
    
    private void update() {
        
    }
    
    private void render() {
        BufferStrategy bs = this.getBufferStrategy();
        if(bs == null) {
            createBufferStrategy(3);
            return;
        }
        
        screen.render();
        
        for(int i = 0; i < WIDTH * HEIGHT; i++) {
            pixels[i] = screen.pixels[i];
        }
        
        Graphics g = bs.getDrawGraphics();
        g.drawImage(img, 0, 0, WIDTH, HEIGHT, null);
        g.dispose();
        bs.show();
        
    }
    
    public static void main(String[] args) {
        Display game = new Display();
        JFrame frame = new JFrame();
        frame.setResizable(false);
        frame.add(game);
        frame.pack();
        frame.setTitle(game.TITLE);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(WIDTH, HEIGHT);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
        
        System.out.println("running...");
        
        game.start();
    }
}


Render.java:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package graphics;

public class Render {
    public final int width;
    public final int height;
    public final int[] pixels;
    
    public Render(int width, int height) {
        this.width  = width;
        this.height = height;
        pixels = new int[width * height];
    }
    
    public void draw(Render render, int xOffset, int yOffset) {
        for(int y = 0; y < render.height; y++) {
            int yPix = y + yOffset;
            for(int x = 0; x < render.width; x++) {
                int xPix = x + xOffset;
                pixels[xPix + yPix * width] = render.pixels[x + y * render.width];
            }
        }
    }
    
}


Screen.java:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package graphics;

import java.util.Random;

public class Screen extends Render {

    private Render test;
    
    public Screen(int width, int height) {
        super(width, height);
        Random random = new Random();
        test = new Render(256, 256);
        for(int i = 0; i < 256*256; i++) {
            test.pixels[i] = random.nextInt();
        }
    }

    public void render() {
        draw(test, 0, 0);
    }

}

Luca

Treue Seele

  • »Luca« ist der Autor dieses Themas

Beiträge: 188

Wohnort: Braunschweig

  • Private Nachricht senden

7

08.04.2013, 16:40

Ok, hab den 'Fehler' gefunden. Habe versehentlich einen Breakpoint gesetzt, der mir aber nicht direkt vom Debugger angezeigt wurde.
Danke trotzdem für eure Hilfe :)

Werbeanzeige