Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Ich habe ein Problem mit der Eingabe von der Tastatur.
Im Ablauf eines Programms soll zunächst eine Information durch die Tastatur mit Benutzung von Enter eingegeben werden. Das geschieht durch den Code
Code:
eingabestrom = new InputStreamReader(System.in);
eingabe = new BufferedReader (eingabestrom);
try
{
System.out.print("Name des Ausgabefiles: " );
name= eingabe.readLine();
eingabestrom.close();
eingabe.close();
}
catch (IOException e)
{
System.out.print("Fehler");
}
Später sollen Eingaben ohne Benutzung von Enter gemacht werden. Dies soll mit der Methode keyTyped() erfolgen.
Nun das Problem. Wenn zuvor obiger Code im Programm steht, funktioniert keyTyped() nicht. Wenn dieser Code wegkommentiert wird, funktioniert keyTyped einwandfrei. Es sieht so aus, als müsse die Methode der Eingabe mit Enter wieder "abgeschaltet" werden. Aber wie?
Hat jemand einen Ratschlag, wie das Peoblem zu lösen ist?
Vielen Dank!
pepe-je
bei mir funktioniert das keyTyped auch nach den Eingabe, man muss natürlich erst wieder die GUI aktivieren, also von der Konsole dahin wechseln, wie läuft bei dir denn das keyTyped ab?
wenn du den System.in-Stream schließt, dann kannst du damit danach nie wieder was eingeben
Code:
public class TestGUI
extends JFrame
{
public TestGUI()
throws Exception
{
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(200, 200);
setVisible(true);
getContentPane().requestFocus();
getContentPane().addKeyListener(new KeyAdapter()
{
private int count;
public void keyTyped(KeyEvent e)
{
System.out.println("keyTyped");
count++;
if (count % 4 == 0)
{
x();
}
}
});
}
static void x()
{
InputStreamReader eingabestrom = new InputStreamReader(System.in);
BufferedReader eingabe = new BufferedReader(eingabestrom);
try
{
System.out.print("Name des Ausgabefiles: ");
String name = eingabe.readLine();
System.out.println("Name: " + name);
eingabestrom.close();
eingabe.close();
}
catch (IOException e)
{
System.out.println("Fehler: " + e);
}
}
public static void main(String[] args)
throws Exception
{
new TestGUI();
}
}
-------
Ausgabe:
keyTyped
keyTyped
keyTyped
keyTyped
Name des Ausgabefiles: fff
Name: fff
keyTyped
keyTyped
keyTyped
keyTyped
Name des Ausgabefiles: Fehler: java.io.IOException: Stream closed
Hallo, SlaterB,
vielen Dank für Deine Antwort. Rückkehr von der Konsole zur GUI ist sicher der richtige Weg, aber wie Du das gemacht hast, geht es meinem Programm nicht, denn es soll zuerst von der Konsole eingegeben werden und später sehr oft mir keyTyped(). D.h. , der Einschluß der Methode x() in keyTyped() läuft bei mir nicht.
Aber die Rückkehr von der Konsole zur GUI ist sicher ein richtiger Tip. Nur wie ist das zu machen?
Etwas genauer sieht mein Code so aus:
Code:
public class Replikation
extends Frame
implements KeyListener
{
// Definition der Variablen
public Replikation()
{
setLayout(null);
setBackground(Color.lightGray);
setSize(1300,800);
setVisible(true);
addKeyListener(this);
addWindowListener(new WindowLauscher());
// weiterer Code
}
public void naming ()
{
eingabestrom = new InputStreamReader(System.in);
eingabe = new BufferedReader (eingabestrom);
try
{
System.out.print("Name des Ausgabefiles: " );
name= eingabe.readLine();
eingabestrom.close();
eingabe.close();
}
catch (IOException e)
{
System.out.print("Fehler");
}
}
public void presentation()
{
//Code
}
public void keyTyped()
{
// Code
}
public void keyPressed(KeyEvent event){}
public void keyReleased(KeyEvent event){}
public static void main(String[] args)
{
Replikation rep = new Replikation();
rep.naming();
rep.presentation();
}
}
Beim Ablauf der Methode presentation() wird keyTyped() wiederholt benutzt, in naming() nicht. Deiner Idee folgend, müßte man nach naming() zur GUI wechseln. Wie ist das zu machen??
es gibt eine Methode toFront(), aber das Eclipse-Fenster zur Eingabe konnte es bir mir zumindest nicht überwinden,
naja, nicht weiter mein Problem,
macht keinen Sinn den User von der Konsole weg hinzu einem Programm zu zwingen, das kann der auch selber machen,
überhaupt sehr komisch, gleichzeitig Konsole und GUI zu verwenden,
dazu kann ich nichts weiter beitragen