KeyListener

MrOpalala

Mitglied
Hallo Leute!
Ich habe ein Probelm mit meinen Key und MouseMotion Listener. Undzwar habe ich zwei Spiele in denen ich diese Listener benutze und will diese mit einem Menü aufrufen. Wenn ich jetzt nur den Konstruktor der Klasse aufrufe funktionieren die Listener nicht. Kann mir da jemand weiterhelfer?
 
Zuletzt bearbeitet von einem Moderator:
Sorry, aber ???:L:autsch::bahnhof:

Kannst du das evtl. noch ein wenig genauer beschreiben evtl. auch mit einem simplen Codebeispiel?
 
Der Fehler liegt ganz klar in Zeile 1443 😀 Kann mich meinem Vorredner nur anschließen, wie soll dir jemand mit so einer Problembeschreibung im Themenbereich der Programmierung helfen?!
 
So hier mal n bisschen Code:

Erst mal die Klasse von Spiel:
[JAVA=42]
import java.awt.image.BufferStrategy;
import java.awt.image.MemoryImageSource;
import java.awt.image.BufferedImage;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.imageio.ImageIO;
import javax.swing.*;


public class MainPong extends JFrame implements MouseMotionListener, KeyListener{
.
.
.
.
.
.
public MainPong() {
.
.
.
addMouseMotionListener(this);
addKeyListener(this);
.
.
initGame();

while(true) {
long start = System.currentTimeMillis();
SpielLogik();
while(System.currentTimeMillis()-start < 5) {

}
}
[/code]

So, an sich funktioniert das Spiel wenn es halt direkt gestartet wird.
Aber wenn man den Konstruktor der Klasse im JFrame über einen Button Aufruft wir alles gezeichnet und der ball Bewegt sich auch. Nur die Listener funktionieren nicht

Hier mal das JFrame:
[JAVA=42]
public class Menu extends javax.swing.JFrame {


private MainPong dasSpiel;
/** Creates new form Menu */
public Menu() {
initComponents();
}
.
.
.
.
.

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {

dasSpiel = new MainPong();

}

/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Menu().setVisible(true);
}
});
}

// Variables declaration - do not modify
private javax.swing.JButton jButton1;
// End of variables declaration

}
[/code]
 
Dein Code verwirrt sehr...Aber was passiert dann mit dem Menu JFrame? Bleibt der offen so dass beide JFrame gelichzeitig laufen oder lässt du den verschwinden?

Ansonsten würde mir grade einfallen...Versucht den zweiten JFrame in einen extra Thread zu tun?

Aber du könntest auch mal die Listener zeigen, wenn es die sind die Probleme machen.
 
Es dürfte ja eigentlich nicht an den Listener Selber liegen denn wenn ich das Spiel normal (also mit run file) Starte geht ja alles. Nur wenn ich die Spiel klasse über den Button öffne gehen die Listener nicht und das Frame lässt sich auch nicht schließen.

Hier mal die Listener:
[JAVA=42]
public void mouseMoved(MouseEvent e) {
if(e.getX() < 599){
schlaeger.x = e.getX();
}
}

public void keyPressed(KeyEvent e) {
if(e.getKeyChar() == 's'){
if(SoundAN == true){
SoundAN = false;
}else SoundAN = true;
}

if(e.getKeyChar()== 'p'){
if(Pause == false){
Pause = true;
}else Pause = false;
}
}
[/code]
 
die main-Methode ist ein separater Thread,
von einem Button aus gestartet verwendest du dagegen den AWT-Thread,

falls es eine längerfristige Aktion wie die angedeutete while(true)-Schleife gibt, dann besteht tatsächlich ein Problem,
starte MainPong in einem separaten Thread

Schleifen wie
> while(System.currentTimeMillis()-start < 5) { }
laufen übrigens ununterbrochen mit 100% CPU-Last, mit Thread.sleep() könntest du dagegen ganz sanft eine Pause einlegen
 

Zurück
Oben