Keylistener funktioniert nicht richtig.

Status
Nicht offen für weitere Antworten.
E

Ein Gast

Gast
Ich hab eine Frame mit mehrere Panels das einen keylistener verwendet. Dieser funktioniert nach einem Programmstart einwandfrei.

Öffne ich ein weiteres Frame mit new SecondFrame() (über den keylistener) so wird das zweite frame korrekt geöffnet und funktioniert auch. Natürlich hat jetzt das zweite frame den focus. Schließe ich das zweite frame mit einem this.dispose() bekommt das erste Fenster den focus wieder zurück (also es ist 'ausgewählt').

Aber dann geht der keylistener einfach nicht mehr. Mouselistener funktioniert noch, aber der keylistener will einfach nicht mehr.

Was das ganze noch interessanter macht ist folgendes; Wenn ich breakpoints in den keyevent hineinmache und dann mit eclipse debugge funktioniert es! Sonst aber nicht.


Ja, und jetzt weis ich nicht mehr weiter. Leider brauche ich den keylistener auch nachdem das zweite frame geschlossen wurde.
 
E

Ein Gast

Gast
Das geht leider nicht. Dafür ist es etwas zu umfangreich. Ich kann zwar die relevanten teile posten, aber die sind eh vermutlich klar.

Erstellen vom listener
Code:
// Keyadapter for the map
		mka = new KeyAdapter() {
			public void keyPressed(KeyEvent e) {
				int keyCode = e.getKeyCode();
				System.out.println(keyCode);

				// Ctr key sequences
				if (e.isControlDown()) {
					switch (keyCode) {
						case KeyEvent.VK_ENTER :
							MainLogic.getInstance().onEndButtonClick();
							break;
					}
				} else {
					switch (keyCode) {
...

Zuordnen vom listener
Code:
this.addKeyListener(mka);

Aufruf des zweiten fensters
Code:
new BuildViewer(getMapValueAt(getHumanLogic().getSelectedUnit().getPos().x,
						getHumanLogic().getSelectedUnit().getPos().y));

Dispose des zweiten fensters
Code:
stopengine = true;

		try {
			Thread.sleep(100);
		} catch (Exception e) {
		}
		this.dispose();

Tja und dann geht der listener nicht mehr. Als ob in das zweite fenster irgendwie mit in die zerstörung nimmt.
 
S

SlaterB

Gast
> Das geht leider nicht. Dafür ist es etwas zu umfangreich.

die Kunst und dein Beitrag zur Lösung ist ja gerade die Vereinfachung,
das zweite Fenster muss nicht aus 20 Klassen mit 1000 Zeilen Code bestehen sondern nur ein 20-Zeilen-Dummy-JFrame,

(wenn es mit dem Dummy nicht mehr zu dem Problem kommt,
dann hast du schon einen ersten Schritt zur Problemlösung getan)

das Haupt-JFrame muss etwas größer sein,
z.B. den KeyListener und evlt. noch EINE Komponente für den KeyListener enthalten,
aber auch nicht mehr als 100 Zeilen

(wenn es mit dem einfacheren Haupt-JFrame nicht mehr zu dem Problem kommt,
dann hast du schon einen ersten Schritt zur Problemlösung getan)
 
G

Guest

Gast
Hm, hab das gerade gemacht. Also den code so massiv wie möglich reduziert (also in einem zweiten project).

Die Idee war gut. Im hab mir gedacht das es vielleicht am multithreading liegen könnte (die weiteren threads haben zwar nichts damit zu tun, aber, man weis ja nie). Jetzt war kein multithreading drinnen, aber trotzdem ist es nicht gegangen.

Seltsam das Ganze. Als ob der focus nicht richtig zurückgegeben wird. (Der ist aber da..)
 
E

Ein Gast

Gast
Ich hab das Ganze soeben in einem älteren voll funktionsfähig Programm probiert und genau dasselbe kommt raus. Sobald ein zweites Fenster geöffnet wird ist der keyadapter irgendwie kaputt.

Ich verwende java 6 (aber ohne updates da die anscheinend noch nicht in den ubuntu repositories sind).

Ich nehm mal an das ich der einzige Mensch auf erden bin der diesen Fehler hat? seufz. Und dabei sind grad keyadapter dringend notwendig..
 

Wildcard

Top Contributor
Nimm stattdessen die InputMap und ActionMap. Gerade bei mehreren Fenstern ist der Input-Fokus nicht der beste Weg.
 
E

Ein Gast

Gast
Hab ich auch schon probiert. Aber es kommt genau dasselbe dabei heraus. (Hab vorher im Forum dazu herumgesucht)

Ich werd später mal schauen ob das Problem auch unter windows auftritt, vielleicht hab ich ja irgendwas falsch konfiguriert. (Was ich aber nicht glaube).

Nunja, da bleibt mir wohl nichts anderes übrig als mich auf mouselistener zu konzentrieren (die einwandfrei funktionieren). Wird zwar nicht einfach für ein werdendes strategiespiel, aber irgendwie muss es gehen.
 
E

Ein Gast

Gast
Hab ich. Nur weis ich nicht wo ich es uploaden soll. Außerdem geht noch so gut wie gar nichts. (und der code ist unübersichtlich..). (das testprojekt hab ich aus frust wieder gelöscht :oops: )

Ah, verdammt. Wenn das wenigstens bei mir ein einzelfall wäre. Aber wenn es in 3 nicht verwandten projekten nicht geht? crap.
 
E

Ein Gast

Gast
Hab schnell wieder ein testprojekt zusammen gebaut. Natürlich geht das Ganze wieder nicht, aber hier ist der Code:

Code:
public class Main extends JFrame{

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		new Main();
	}

	public Main() {
		super();
		
		this.setSize(500, 500);
		this.setTitle("MainFrame");
		
//		 Keyadapter for the map
		KeyAdapter ka = new KeyAdapter() {
			public void keyPressed(KeyEvent e) {
				int keyCode = e.getKeyCode();
				System.out.println(keyCode);
				
				switch (keyCode) {
					case KeyEvent.VK_ENTER :
						new SecondFrame();
						break;
				}
			}
		};
		
		this.addKeyListener(ka);
		this.setVisible(true);
		
		this.addWindowListener(new java.awt.event.WindowAdapter() {
			@Override
			public void windowClosing(WindowEvent e) {
				closeFrame();
			}
		});
	}
	
	private void closeFrame() {
		this.dispose();
	}
}


Zweites Frame:

Code:
public class SecondFrame extends JFrame {
	public SecondFrame() {
		super();
		
		this.setSize(500, 500);
		this.setTitle("Second Frame");
		
		this.addWindowListener(new java.awt.event.WindowAdapter() {
			@Override
			public void windowClosing(WindowEvent e) {
				closeFrame();
			}
		});
		
		this.setVisible(true);
	}
	
	private void closeFrame() {
		this.dispose();
	}
}
 

Wildcard

Top Contributor
Ich habe folgendes versucht:
Code:
public class Main extends JFrame {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		new Main();
	}

	public Main() {
		super();
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		this.setSize(500, 500);
		this.setTitle("MainFrame");
		JPanel panel = new JPanel();
		panel.add(new JTextField("test"));
		JButton b = new JButton("open");
		b.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {
				new SecondFrame();

			}

		});
		panel.add(b);
		add(panel);
		this.setVisible(true);
	}
}

Das Ergebnis hat mich dann doch sehr überrascht.
Sobald ich auf den Knopf drücke, kann ich nichts mehr in das Textfeld schreiben.
Das geht erst dann wieder, wenn entweder das 1. Fenster resized wird, oder ich den Button erneut drücke.
Es werden also überhaupt keine KeyEvents mehr weitergeleitet.
Da ich auch Ubuntu und Java 6 verwende, gehe ich von einem Bug im Zusammenhang mit Gtk aus.
Ich würde dich bitten die Bug Database zu durchsuchen.
Exisitiert ein solcher Bug bereits, sei doch so nett ihn hier zu verlinken.
Ansonsten eröffne einen Bug dafür.
 
E

Ein Gast

Gast
Mir ist grad aufgefallen dass ich einen Inputdialog habe und dieser sich auch seltsam verhält. Also nachdem er den focus verliert kann auch nichts mehr eingegeben werden. Das deckt sich mit deiner Aussage.

Vielleicht liegt das auch an compiz? Hab leider im Moment recht große schwierigkeiten mit compiz + java-resizen. Da gibt es auch einige gravierende Fehler die ich unter windows oder ohne compiz nicht habe.

Ich schau mir das morgen noch genauer an bzw. teste dann mal mit compiz herum.
 

Wildcard

Top Contributor
Zum Test Zeitpunkt liefen bei mir weder Compiz noch Beryl sondern Metacity.
Sollte sich das soweit bestätigen handelt es sich um einen gravierenden Bug der entweder schon bekannt (und hoffentlich behoben) ist, oder unbedingt gemeldet werden muss.
 

Ralf W. Balz

Mitglied
Hi,

ich habe folgendes(Siehe Unten), was ich von dir übernommen habe, ausprobiert.
Bis auf die "imports", sind die Codes gleichgeblieben. Es funktioniert bei mir, getestet habe ich es unter:
Windows XP mit JRE 1.6.0.01 auch JRE 1.5.0.09 und
Ubuntu 7.04 mit JRE 1.5.0.12 auch JRE 1.6.0.02

Ich kann das zweite Frame öffnen und weiterhin in das Feld schreiben, dann das zweite Frame
schließen und auch weiter in das Feld schreiben. Es lässt vermuten, dass es kein Bug ist,- hast du
denn vielleicht einen Zweitrechner oder einen Rechner von irgendwem,wo du mal gegentesten
kannst? Damit könnte man das Problem sicher weiter eingrenzen.

Grüße
Ralf


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

public class Main extends JFrame {

	   /**
	    * @param args
	    */
	   public static void main(String[] args) {
	      new Main();
	    
	   }

	   public Main() {
	      super();
	      setDefaultCloseOperation(EXIT_ON_CLOSE);
	      this.setSize(500, 500);
	      this.setTitle("MainFrame");
	      JPanel panel = new JPanel();
	      panel.add(new JTextField("test"));
	      JButton b = new JButton("open");
	      b.addActionListener(new ActionListener() {

  	  
         public void actionPerformed(ActionEvent e) {
	            new SecondFrame();

	         }

	      });
	      panel.add(b);
	      add(panel);
	      this.setVisible(true);
	   }
	}

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

public class SecondFrame extends JFrame {
   public SecondFrame() {
      super();
      
      this.setSize(500, 500);
      this.setTitle("Second Frame");
      
      this.addWindowListener(new java.awt.event.WindowAdapter() {
         @Override
         public void windowClosing(WindowEvent e) {
            closeFrame();
         }
      });
      
      this.setVisible(true);
   }
   
   private void closeFrame() {
      this.dispose();
   }
}
 
E

Ein Gast

Gast
ubuntu-forum

Im Link wird das Problem das ich habe, und eine Lösung dafür beschrieben. Ich kanns im Moment nicht testen da ich nicht zuhause bin.

Aus dem Forums-Post:
Das Problem besteht nur, wenn in der Datei /etc/environment der Eintrag AWT_TOOLKIT=”MToolkit” vorhanden ist.

Diesen Eintrag habe ich angelegt um Java mit Beryl verwenden zu können. Solange dieser Eintrag vorhanden ist tritt der oben erwähnte Fehler aber auch in Metacity auf. Momentan habe ich mit entschlossen den Eintrag aus /etc/environment zu löschen und vorläufig auf Beryl zu verzichten. Wenn jemand eine Lösung für das Problem kennt, damit ich weiterhin Beryl als Fenstermanager einsetzen kann bin ich natürlich sehr dankbar.

Meine /etc/environment hab ich auch so verändert um compiz zu verwenden. Sobald ich daheim bin werd ich mal schauen ob es sich dadurch beheben lässt. Vielleicht könnte wildcard mal schauen wie beim ihm die /etc/environment ausschaut.

Schade das java und compiz so viele schwierigkeiten zusammen haben.
 

Wildcard

Top Contributor
Nein, ich habe bei mir auf XToolkit gesetzt. Ich meine mich aber zu erinnern das ich die Variable mal für Eclipse gesetzt habe. Kann sein das ich vergessen habe die rauszunehmen.
 
G

Guest

Gast
Also ich kann nicht mit bestimmtheit sagen an was es liegt. Habe zwar das Mtoolkit aus meiner etc/enivironment entfernt und mich dann neu eingeloggt aber nichts hat sich verändert.

Vielleicht hab ichs auch sonst noch wo drinnen stehen? Keine Ahnung.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Z KeyListener funktioniert nicht? Weshalb? Java Basics - Anfänger-Themen 8
Gfreak23 Input/Output KeyListener funktioniert auf Laptop nicht allerdings auf Tower-PC Java Basics - Anfänger-Themen 8
K Input/Output KeyListener funktioniert nicht Java Basics - Anfänger-Themen 3
Maxim6394 KeyListener funktioniert nicht Java Basics - Anfänger-Themen 20
J KeyListener (keyTyped) funktioniert nicht Java Basics - Anfänger-Themen 9
Das Brot Nach .add(JRadioButton) funktioniert der KeyListener nicht mehr Java Basics - Anfänger-Themen 2
U ActionListener und KeyListener - KeyListener funktioniert nicht Java Basics - Anfänger-Themen 2
M TabbedPane: KeyListener funktioniert nicht mehr Java Basics - Anfänger-Themen 8
H KeyListener funktioniert nicht Java Basics - Anfänger-Themen 8
A KeyListener funktioniert nicht Java Basics - Anfänger-Themen 7
G Applet mit Keylistener funktioniert nicht Java Basics - Anfänger-Themen 3
D KeyListener funktioniert nicht Java Basics - Anfänger-Themen 10
O KeyListener funktioniert nur wenn er will Java Basics - Anfänger-Themen 2
P Wie kann ich meine Keylistener Klasse unterscheiden lassen, von welcher "Quelle" der Input kommt? Java Basics - Anfänger-Themen 2
B Bild per KeyListener drehen Java Basics - Anfänger-Themen 1
javalux123 Keylistener auf andere Fenster Java Basics - Anfänger-Themen 3
F Problem mit KeyListener in kombination mit dem ActionListener Java Basics - Anfänger-Themen 4
M KeyListener reagiert nicht Java Basics - Anfänger-Themen 4
M Mit KeyListener Farbe von Label ändern Java Basics - Anfänger-Themen 13
N Java Keylistener Java Basics - Anfänger-Themen 2
B KeyListener funkioniert nicht Java Basics - Anfänger-Themen 2
F KeyListener Java Basics - Anfänger-Themen 3
S Erste Schritte 2D Grafik Probleme mit KeyListener. Java Basics - Anfänger-Themen 18
G KeyListener und JButton vertragen sich nicht Java Basics - Anfänger-Themen 1
J-Gallus Keylistener verstehen Java Basics - Anfänger-Themen 17
S Keylistener Java Basics - Anfänger-Themen 16
S Keylistener im Grafikfenster Java Basics - Anfänger-Themen 3
H Mouse- und KeyListener Probleme? Java Basics - Anfänger-Themen 5
N KeyListener in Thread Java Basics - Anfänger-Themen 0
LexeB4F for schliefe in KeyListener Java Basics - Anfänger-Themen 3
R KeyListener auslagern Java Basics - Anfänger-Themen 3
J KeyListener aus anderer Klasse bereitet Probleme Java Basics - Anfänger-Themen 1
T KeyListener Java Basics - Anfänger-Themen 2
J KeyListener - mal wieder... Java Basics - Anfänger-Themen 2
TheSorm KeyListener Problem Java Basics - Anfänger-Themen 4
M KeyListener Java Basics - Anfänger-Themen 3
S KeyListener/ActionListener/paint()/repaint() Java Basics - Anfänger-Themen 3
D KeyListener nicht mehr aktiv nach ActionPerformed Java Basics - Anfänger-Themen 2
C Mehrere Tasten beim KeyListener gleichzeitig lesen Java Basics - Anfänger-Themen 2
L Input/Output Java 3D mit KeyListener Java Basics - Anfänger-Themen 1
S KeyListener reagiert nicht. Java Basics - Anfänger-Themen 4
L KeyListener ohne textfeld Java Basics - Anfänger-Themen 4
J KeyListener,MouseListener,MouseMotionListener und static Java Basics - Anfänger-Themen 7
P Klassen Bei KeyEvent in KeyListener den Tastendruck abbrechen Java Basics - Anfänger-Themen 5
B KeyListener als allgemeine Methode Java Basics - Anfänger-Themen 5
H KeyListener auf ganzes Fenster setzen Java Basics - Anfänger-Themen 14
0 KeyListener ausserhalb der Applikation Java Basics - Anfänger-Themen 5
G KeyListener Java Basics - Anfänger-Themen 4
D KeyListener und ActionListener Problem Java Basics - Anfänger-Themen 6
J KeyListener funtioniert nicht! Java Basics - Anfänger-Themen 3
J KeyListener Java Basics - Anfänger-Themen 11
P Input/Output KeyListener reagiert nicht Java Basics - Anfänger-Themen 4
G KeyListener, Fokus Java Basics - Anfänger-Themen 8
A Input/Output Keylistener Aktiv schalten Java Basics - Anfänger-Themen 8
J keyListener - Genau 1 Aktion soll bei 1 Tastenausdruck ausgeführt werden Java Basics - Anfänger-Themen 11
S KeyListener Java Basics - Anfänger-Themen 2
A Erste Schritte Problem mit KeyListener Java Basics - Anfänger-Themen 6
Maxim6394 KeyListener geht nicht Java Basics - Anfänger-Themen 15
A Wie KeyListener adden? Java Basics - Anfänger-Themen 15
U KeyListener StackOverflowError Java Basics - Anfänger-Themen 2
W KeyListener auf Applet mit Runnable Java Basics - Anfänger-Themen 4
M Apfel-Spiel KeyListener Java Basics - Anfänger-Themen 33
Luk10 KeyListener Java Basics - Anfänger-Themen 13
S KeyListener aus anderer Klasse hinzufügen Java Basics - Anfänger-Themen 19
P KeyListener im Applet Java Basics - Anfänger-Themen 2
S KeyListener-Anwendung Java Basics - Anfänger-Themen 7
A KeyListener funzt ned Java Basics - Anfänger-Themen 6
D KeyListener, Unterscheidung Groß/Kleinbuchstaben Java Basics - Anfänger-Themen 3
S KeyListener als class? Java Basics - Anfänger-Themen 4
F Applet mit KeyListener, "Alt"-Taste und Konflikt mit Browser Java Basics - Anfänger-Themen 2
P KeyListener Java Basics - Anfänger-Themen 2
S KeyListener für einfaches Programm Java Basics - Anfänger-Themen 3
S KeyListener aktiv auch wenn minimiert? Java Basics - Anfänger-Themen 4
Z Globaler Keylistener Java Basics - Anfänger-Themen 2
V KeyListener Beispiel Java Basics - Anfänger-Themen 13
T canvas killt KeyListener Java Basics - Anfänger-Themen 2
J Keylistener aber wie jTextField auswahl? Java Basics - Anfänger-Themen 3
D KeyListener, nichts passiert Java Basics - Anfänger-Themen 6
D Keylistener zu langsam Java Basics - Anfänger-Themen 7
C Problem mit JPopupMenu, JTextField und Keylistener Java Basics - Anfänger-Themen 2
G Keylistener in einer Schleife Java Basics - Anfänger-Themen 9
M problem mit keylistener Java Basics - Anfänger-Themen 2
N KeyListener ohne GUI? Java Basics - Anfänger-Themen 5
M KeyListener Java Basics - Anfänger-Themen 3
T KeyListener wird nicht ausgelöst Java Basics - Anfänger-Themen 6
O KeyListener Java Basics - Anfänger-Themen 8
Developer_X KeyListener ohne JFrame Java Basics - Anfänger-Themen 13
H KeyListener Java Basics - Anfänger-Themen 4
Developer_X KeyListener Actions (hat mit Java3D zu tun) Java Basics - Anfänger-Themen 20
Developer_X JFrame soll KeyListener adden Java Basics - Anfänger-Themen 32
F Keylistener Java Basics - Anfänger-Themen 12
hdi KeyListener : keyTyped() nicht nutzbar? Java Basics - Anfänger-Themen 1
StickToFreak Runnable + KeyListener? Java Basics - Anfänger-Themen 32
dl85hej Keylistener Java Basics - Anfänger-Themen 16
H KeyListener will nicht reagieren Java Basics - Anfänger-Themen 5
R Fehlersuche - KeyListener, KeyAdaper - Nichts Klappt! Java Basics - Anfänger-Themen 2
G Prob. mit KeyListener und Unterklasse Java Basics - Anfänger-Themen 5
G Keylistener nur besimmte Zeichen zulassen Java Basics - Anfänger-Themen 8
hdi keylistener hat keinen fokus oder: listener ohne frame? Java Basics - Anfänger-Themen 10
D KeyListener Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben