Keylistener

Status
Nicht offen für weitere Antworten.

dl85hej

Mitglied
Hallo Freunde!

Stecke im KeyListener fest!
Nach dem JAVA Handbuch habe ich meine Klasse wie folgt erweitert:
Code:
public class meineKlasse 
extends Frame

dann wird nach dem Handbuch der Konstruktor wie folgt erstellt:
Code:
public meineKlasse(){
           addKeyListener(new MyKeyListener());
       }


Dann wird nach dem Handbuch eine weitere Klasse integriert...

Code:
class MyKeyListener
extends KeyAdapter
{
public void keyPressed(KeyEvent event) {
if(event.getKeyCode()== KeyEvent.VK_ESCAPE){
t.interrupt();    
}
}

Das Programm läuft, aber nichts passiert...

Ich rieche 2 Probleme:
1. mein Eent wird ignoriert
2. die Methode interrup() meines Threads t wird nicht erkannt....


hmmm
 

0x7F800000

Top Contributor
ich seh da auf anhieb nichts. Wie alt ist denn das Buch? "Frame" ist samt der ganzen AWT-guis ein wenig überholt, und das seit... einem halben jahrzehnt oder sogar noch länger, kA? Und Klassennamen schreibt man Groß.

poste doch einfach mal den kompletten code.
 

dl85hej

Mitglied
Code:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package projekt1;
import java.io.*;
import java.awt.*;
import java.awt.event.*;

/**
 *
 * @author dl85hej
 */
public class projekt1 
    extends Frame
{    
    public String  pfad, Zeichenkette, datei = "leer";
    public Boolean Ende = false;
    public static Integer Taste, Streifendauer, UGW, OGW, key,line = 0;
    public LineNumberReader f;
   

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args){
        // TODO code application logic here
        //Lade alle Daten für die Klasse
        Initialisierung();
        //eMail();
        
        //Streifendauer();
        
        //Methode Datei laden und Zeile ermitteln
        projekt1 mK = new projekt1();
        mK.Zeile();
        
        
        //hier wird die Streifendauer aus der Initialisierung genutzt
        //System.out.println(Streifendauer);
        Streifendauer = (Streifendauer * 100);
        //ohne neuen Thread (Teil eines Programms) würde die gesamte main schlafen 
       Thread t = new Thread(){
           @Override
           public void run(){
               System.out.println( "Es gibt ein Leben vor dem Tod.  " ); 
               while ( ! isInterrupted() ){
                   System.out.println( "Und er läuft und er läuft und er läuft" );
                   try{
                       Thread.sleep(Streifendauer);
                       }catch ( InterruptedException e ){
                           interrupt();
                           System.out.println( "Unterbrechung in sleep()" );
                       }
                   }
               System.out.println( "Das Ende" );
               }
           };
           t.start();   
       }
    
     
      
       
       public projekt1(){
           addKeyListener(new MyKeyListener());
       }
   
    
     public static void Exit(){
         System.exit(0);
     }
     
     public static void Initialisierung(){
        String zeile, Wachtmeister, UserID, smtp, Port;
        //Integer Streifendauer;
        Boolean Streifenart;
        
        System.out.println("projekt1 im Dienst!");
        System.out.println("Öffne config und...");
        try{
            //Der Aufruf new Filereader() erzeugt eine neue Instanz der Klasse FileReader
            //unter der Instanz(Referenzvariable) datei wird der Speicher reserviert
            FileReader datei = new FileReader("config.ini");
            //Klasse BufferedReader sorgt dafür, dass mit einem Lesezugriff 
            //blockweise gelesen wird und nicht zeichenweise
            //Vorteil: erhöht die Performance
            BufferedReader dat_read = new BufferedReader(datei);
            
            zeile = dat_read.readLine();
            System.out.println("Init1: ...lese den Wachtmeister "+ zeile);
            Wachtmeister = zeile;
            
            zeile = dat_read.readLine();
            System.out.println("Init2: ...lese die User -ID "+ zeile);
            UserID = zeile;
            
            zeile = dat_read.readLine();
            System.out.println("Init3: ...lese den smtp - Server "+ zeile);
            smtp = zeile;
            
            zeile = dat_read.readLine();
            System.out.println("Init4: ...lese den Port "+ zeile);
            Port = zeile;
            
            zeile = dat_read.readLine();
            System.out.println("Init5: ...lese die Streifendauer von "+ zeile + " Minuten");
            Streifendauer = Integer.parseInt(zeile);
            
            zeile = dat_read.readLine();
            System.out.println("Init6: ...lese die Art der Streife "+ zeile + " (true = Dauerstreife / false = Zeitstreife)");
            Streifenart = Boolean.valueOf(zeile);
            
            dat_read.close();
            System.out.println("...schließe config!");
        }
        catch (FileNotFoundException e)
        {
            System.out.println("Fehler 1: Datei nicht gefunden");
        }
        catch (IOException e)
        {
            System.out.println("Fehler 2: "+ e.getMessage());
        }
    }
     
     
     
     public static void Streifendienst(){
         String dummy;
         //meinObjekt1 für den Vorlauf Modulmontage Emden
         //Objekt hat die Referenzvariable - Name im Speicher - meinObjekt1
         projekt1 meinObjekt1;
         meinObjekt1 = new projekt1();
         
         projekt1 Datei1;
         Datei1 = new projekt1();
         
         Datei1.datei = "Vorlauf1.txt";
         //lies Zeile
         Datei1.line = 0;
         Datei1.Zeile();
         StringBuffer sb = new StringBuffer(Datei1.Zeichenkette);
         
         String satz = Datei1.Zeichenkette;
         //Vorlaufdatei zersplitten
         Integer x =0;
         String [] result = satz.split("\\s");
         
         for(int X=0;x<result.length;x++){
             StringBuffer sba = new StringBuffer(result[x]);
             sba.delete(0,7);
             result[x]=sba.toString();
             //das Produktionsbit vom Rest auswerten
             if (x == 6){
                 sba.delete(0,4);
                 result[6]=sba.toString();
                 //System.out.println(result[6]); 
             }
         }     
         
         //meinObjekt2 für die Direktläufer Modulmontage Emden
         //Objekt hat die Referenzvariable - Name im Speicher - meinObjekt1
         projekt1 meinObjekt2;
         meinObjekt2 = new projekt1();
         projekt1 Datei2;
         Datei2 = new projekt1();
         Datei2.datei = "result.ini";
         //DL - Quote SuSE1
         Datei2.line = 23;
         Datei2.Zeile();
         StringBuffer sb1 = new StringBuffer(Datei2.Zeichenkette);
         sb1.delete(0,5);
         //System.out.println(Datei2.Zeichenkette);
         
         
         
         //DL - Quote SuSE2
         Datei2.line = 24;
         Datei2.Zeile();
         StringBuffer sb2 = new StringBuffer(Datei2.Zeichenkette);
         sb2.delete(0,5);
         //System.out.println("After delete: " + sb2);
         //System.out.println(Datei2.Zeichenkette);
     }
    
     
     public void Zeile(){
     Integer i = -1;
     try{
         f = new LineNumberReader(new FileReader(datei));
         //System.out.println(datei);
         while(i < line){
             Zeichenkette = f.readLine();
             i++;
         } 
         f.close();
         }catch (FileNotFoundException e){
             System.out.println("Fehler 1: Datei nicht gefunden");
         }catch (IOException e){
             System.out.println("Fehler 2: "+ e.getMessage());
         }
     }

         
    public static void Vorlaufdaten(){
        System.out.println("Vorlaufdaten");
    }
    public static void Auswerten(){
        System.out.println("Auswerten");
    }
    public static void Alarm(){
        System.out.println("Alarm");
        System.out.println("komme aus dem Streifendienst");
    }
    
    class MyKeyListener
    extends KeyAdapter
    {

        @Override
    public void keyPressed(KeyEvent event) {
        if(event.getKeyCode()== KeyEvent.VK_ESCAPE){
            t.interrupt();   
        }
    }    
}
}
 

Geeeee

Bekanntes Mitglied
Zu aller erst: CodeConventions

2. Das kann niemals klappen. Du erzeugst in der main-Methode einen Thread t lokal und greifst unten im Listener darauf zu. Nicht dein interrupt wird nicht erkannt, sondern dein t. Es exisitiert doch da gar nicht. Mach den Thread zum Testen einfach global und greif dann auf t zu.

3. Gib irgendwas da unten aus oder debugge rein. Der kommt dahin. Jedenfalls soweit ich das irgendwie erkennen kann. :)

4. Schau dir bitte mal CodeConventions an. Auch wenn die im Buch Klassen klein und Methoden / Variablen groß schreiben, tu DU es nicht.
Beispiel: Vorlaufdaten() das sieht aus wie ein Konstruktor und nicht wie ein Methodenaufruf.
Mit einer gemeinsamen Basis ist es auch einfacher solche Blöcke zu verstehen.
 

0x7F800000

Top Contributor
Das Programm läuft, aber nichts passiert...
Ich kann das nicht nachvollziehen. hab's eben versucht zu kompilieren, 1:1 so wie du es gepostet hast, da steht in dicker roter Schrift:
t cannot be resolved
welcher compiler hat das denn trotz grober semantischer Fehler geschluckt?

Dass es mit Groß/kleinschreibung mächtig viel stress gibt wurde bereits erwähnt, dazu müsste man noch hinzufügen, dass die Klassennamen wirklich alles andere als sinnvoll gewählt sind.
das Buch ist von 2008
Wie heißt es?
Ich kann dir jedenfalls noch http://openbook.galileocomputing.de/javainsel8/ empfehlen, die 8. Auflage ist auch erst grad eben erschienen, und der Autor ist nicht grade dafür bekannt, gegen alle Sitten und Konventionen zu verstoßen.
 

dl85hej

Mitglied
@Andrey: das Buch heißt Handbuch der JAVA Programmierung; JAVA ist auch eine Insel ist soeben bestellt worden; Netbeans 6.1....

@Geeeee: Groß- und Kleinschreibung habe ich mir als nächstes auf die Fahne geschrieben...die Schuld liegt bei mir und nicht beim Autor...

JAVA ist auch eine Insel...aber eine komplett andere und dazu noch auf der anderen Halbkugel... :)
 

dl85hej

Mitglied
Hallo!

Habe mal ein neues Projekt erstellt...der KeyListener will einfach nicht auf mich hören:

Code:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package tastaturevent;

import java.awt.Frame;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author dl85hej
 */
public class Main
extends Frame
implements KeyListener{


    /**
     * @param args the command line arguments
     */
    public Main(){
        addKeyListener(this);
    }

    public static void main(String[] args) {
        // TODO code application logic here
        Boolean esc = false;
        while(esc==false){
            try {
                System.out.println("Ich bin ein Dauerläufer");
                Thread.sleep(2000);
            } catch (InterruptedException ex) {
                Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

    }

    public void keyTyped(KeyEvent arg0) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public void keyPressed(KeyEvent event,boolean esc) {
        //throw new UnsupportedOperationException("Not supported yet.");
        if(event.getKeyCode()==KeyEvent.VK_CONTROL){
            esc = true;
        }
    }

    public void keyReleased(KeyEvent arg0) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public void keyPressed(KeyEvent arg0) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

}
 

mvitz

Top Contributor
Du musst auch eine Instanz der Klasse Main mit
[HIGHLIGHT="Java"]Main main = new Main();[/HIGHLIGHT]
erstellen. Sehen tust du dann aber immer noch nichts, da der Frame nicht angezeigt wird.
 

hdi

Top Contributor
Und hol dir Eclipse Ganymede (oder ein anderes Eclipse).
Netbeans ist seeeehr langsam, und Eclipse unterstützt weit mehr/bessere Plugins.

Ausserdem haben >90% Eclipse, nicht nur hier. Wann immer du mal ein Problem mit dem Editor
oder mit Plugins/Frameworks hast, wirst du viel schneller fündig wenn du Eclipse nutzt.
 

0x7F800000

Top Contributor
Nein, sorry... nicht ganz richtig^^ das war nur einer der sehr vielen Punkte... Das ist doch alles totaler schrott.

SEHR wichtiger tipp: vor jede methode die du überschreibst, schreibst du ab jetzt @Override
Code:
    @Override
    public void keyPressed(KeyEvent event,boolean esc) {
        //throw new UnsupportedOperationException("Not supported yet.");
        if(event.getKeyCode()==KeyEvent.VK_CONTROL){
            esc = true;
        }
    }
Dann kriegst du nämlich sofort vom Compiler gesagt, dass du Mist gebaut hast, und brauchst nicht erst auf lahme Antworten aus irgendeinem Forum zu warten ;)
 

dl85hej

Mitglied
@Andrey:

ich habe keine Fenster...ich möchte aus einer fensterlosen Applikation die Tastatur abhören....
Das muss doch gehen...
 

0x7F800000

Top Contributor
ich bin mir nicht so sicher, ob das direkt mit java ohne umwege über jni geht...
wozu soll denn das auch gut sein?:confused:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
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
Z KeyListener funktioniert nicht? Weshalb? Java Basics - Anfänger-Themen 8
T KeyListener Java Basics - Anfänger-Themen 2
Gfreak23 Input/Output KeyListener funktioniert auf Laptop nicht allerdings auf Tower-PC Java Basics - Anfänger-Themen 8
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
K Input/Output KeyListener funktioniert nicht Java Basics - Anfänger-Themen 3
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
Maxim6394 KeyListener funktioniert nicht Java Basics - Anfänger-Themen 20
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
J KeyListener (keyTyped) funktioniert nicht Java Basics - Anfänger-Themen 9
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
O KeyListener funktioniert nur wenn er will Java Basics - Anfänger-Themen 2
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
Das Brot Nach .add(JRadioButton) funktioniert der KeyListener nicht mehr 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
U ActionListener und KeyListener - KeyListener funktioniert nicht Java Basics - Anfänger-Themen 2
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
M TabbedPane: KeyListener funktioniert nicht mehr Java Basics - Anfänger-Themen 8
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
H KeyListener funktioniert nicht Java Basics - Anfänger-Themen 8
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
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
A KeyListener funktioniert nicht Java Basics - Anfänger-Themen 7
D KeyListener Java Basics - Anfänger-Themen 7
B Keylistener auf JSpinner reagiert nicht? Java Basics - Anfänger-Themen 3
G KeyListener für die Taste "/" Java Basics - Anfänger-Themen 5
E brauche hilfe beim KeyListener Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben