Throws Exceptions

Status
Nicht offen für weitere Antworten.
D

Developer_X

Gast
Hi, ich habe jetzt die JavaINsel schon etwas gelesen, bis zum dritten Kapitel bin ich auf jeden fall durch,
ich bin in der Zeit auf die Idee gekommen mein Problem zu vereinfachen, und dann bin ich darauf gekommen, dass die Booleans gar nicht aktualisiert werden, deshalb müsste ich an den void einen KeyListener anbringen, vielleicht mit throws.

Code:
package Boolean;

import java.awt.Frame;
import java.io.IOException;

public class HelloWorld 
{
	static boolean b = false;

	public static void main(String[]args) throws IOException
	{
		
		Keys key = new Keys(b);
		if(b==true)
		{
			System.out.println("HelloWorld");
		}
		Frame frame = new Frame();
		frame.setVisible(true);
	}
}
Code:
package Boolean;

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class Keys implements KeyListener
{
    boolean b1 = false;
	public Keys(boolean b)
	{
		b = b1;
	}
	public void keyPressed(KeyEvent arg0) 
	{
		if(arg0.getKeyChar()=='s')
		{ b1=true;}
	}
	public void keyReleased(KeyEvent arg0) {}
	public void keyTyped(KeyEvent arg0) {}

}
Im KeyListener wird am anfang die Variable boolean b1 definiert.
Wenn diese von einer Taste gedrückt wird, wird sie auf true gesetzt wie ihr sehen könnt.
Und bei public Keys()
habe ich in die klammern eine andere Variable boolean b definiert. Nun aber, habe ich dort auch angegeben, dass b = b1 ist.
Nun in der anderen Klasse, habe ich wieder eine noch andere Variable definiert, die Variable boolean b, und habe als ich in der Main gesagt habe, Keys keys = new Keys(); in die klammern den namen dieser variable eingefügt, so, nun hatte ich gedacht, man muss irgendwo dieses "keys" unterzubringen, aber nur wo?
Außerdem denke ich, dass die variable b in der Klasse HelloWorld gar nicht aktualisiert wird, bzw. nicht von der Klasse keys geändert wird.
Kann mir einer aus diesen Schlussfolgerung sagen, was ich hier falsch mache?
 
S

SlaterB

Gast
> deshalb müsste ich an den void einen KeyListener anbringen, vielleicht mit throws.

was für ein katastrophaler Satz,
und was throws mit der Sache zu tun hat ist mir nicht klar, wird im weiteren auch nicht mehr erwähnt, aber ist Topictitel?
wenn du dein Programm so ist wie gepostet, kannst du 'throws IOException' genausogut weglassen,
hat keine Auswirkung

----

ansonsten:
- KeyListener, die nicht genau nach Anleitungen etwa einem JTextField zugeornet sind, werden nie irgendwelche Ereignisse empfangen

- wenn man einem Parameter etwas zuweist, dann wirkt sich das nicht auf den Aufrufer (b in main) aus

- schon gar nicht würde der Parameter über die Zeit aktualisiert werden, also bei keyPressed neben b1 auch b geändert werden,
das sind ja haarsträubende Vorgänge

- die Abfrage 'if(b==true)' in main-Methode ist etwa 1 ns nach der Erstellung des KeyListeners dran und weit vor Erstellung des JFrames,
bis dahin wird b doch nicht true sein, egal wieviel seltsame magische Variaben-Verknüpfungen man annimmt,

falls jemand nach 5 sec 's' drückt, dann wird auch nicht die bereits beendete main-Methode nochmal ausgeführt, falls du das denkst,
und die main-Methode wird auch nicht unterbrochen, bis jemand etwas eintippt

> Kann mir einer aus diesen Schlussfolgerung sagen, was ich hier falsch mache?

eigentlich alles und das soll nur objektive Kritik sein, brauchst nicht meckern ;)
bitte erst mal die Grundlagen verstehen, wie z.B. dass man einem Parameter nix zuweist,
bevor dann Monate später so komplizierte Dinge wie JFrame, KeyListener usw drankommen
 

hdi

Top Contributor
Hi, ich habe jetzt die JavaINsel schon etwas gelesen, bis zum dritten Kapitel bin ich auf jeden fall durch
:toll:

Außerdem denke ich, dass die variable b in der Klasse HelloWorld gar nicht aktualisiert wird, bzw. nicht von der Klasse keys geändert wird.
Das denkst du vollkommen richtig. Der boolean in der main-Klasse ist vollkommen überflüssig.

Aber generell: Dein Listener ist noch nicht aktiv! Einen Listener musst du an etwas fokusierbares hängen,
also ein Fenster zB. Ein Programm ohne Fenster kann auch keinen KeyListener haben. Das heisst nicht dass du in Programmen ohne Fenster keine Tastatur-Abfragen machen kannst, das schon! Aber nicht mit der Klasse "KeyListener" weil das eine Swing-Komponente ist und eben für Fenster gedacht ist.

Also nutzen kannst du es nur so:

Code:
public static void main(String[]args) throws IOException
   {
      
      Keys key = new Keys(b);
      Frame frame = new Frame();
      frame.addKeyListener(key); // <--- !!
      frame.setVisible(true);
   }

Und das "Hello World" schribst du jetzt in die KeyListener Methoden, und wenn du jetz ne Taste drückst,
wird das ausgedruckt.

Und ohne Fenster funktioniert sowas auch nur modal, d.h. dein Programm hängt und wartet auf eine Abfrage.
Es gibt in Java keine Möglichkeit, einfach die Tastatur-Eingaben per silent zu überwachen!
Wenn du zB im obigen Code das Fenster inaktiv machen würdest, indem du zB auf den Desktop klickst oder auf ein anderes Fenster, dann kann der KeyListener auch nicht mehr arbeiten! Key-Logging geht nich so einfach, aber is ja auch verboten ;)

Wie Slater auch schon sagte: Mit Exceptions hat das ganze erstmal gar nichts zu tun.
 
D

Developer_X

Gast
Okay, danke euch beiden, dass hat mir ne menge aufschluss gegeben
 

L-ectron-X

Gesperrter Benutzer
Vielleicht noch ein allgemeiner Tipp für die if-Abfragen:

Du hast oben geschrieben:
Code:
      if(b==true) 
      { 
          System.out.println("HelloWorld"); 
      }

Das ist "doppelt gemoppelt".

Es genügt völlig:
Code:
if(b) {
   System.out.println("HelloWorld"); 
}
Eine if-Abfrage prüft immer nur, ob etwas wahr oder falsch ist (true oder false);
Deine Variable b ist vom Typ boolean und speichert genau diese beiden Zustände, die man mit einer if-Abfrage ermitteln kann.


hdi hat gesagt.:
Es gibt in Java keine Möglichkeit, einfach die Tastatur-Eingaben per silent zu überwachen!

Ich bin mir da nicht ganz sicher. Aber ich glaube, das hatten wir schon mal und jemand hatte eine Lösung dazu gepostet.
 

hdi

Top Contributor
Ich bin mir da nicht ganz sicher. Aber ich glaube, das hatten wir schon mal und jemand hatte eine Lösung dazu gepostet.

Ja deswegen habe ich "einfach" geschrieben. Mit irgendwelchen Tools und Bibltiotheken kann man da sicherlich etwas zusammenbauen, das auf bestimmten Betriebssystemen funtkioniert. Aber "as is" geht sowas nicht, und man sollte auch immer nur "as is" programmieren finde ich. Ansonsten hat man die falsche Sprache für das Problem gewählt.
 

Schandro

Top Contributor
Ach, noch 3 Tipps:

1. Wär schön wenn du dich anmeldest und nicht immer als Gast schreibst
2. Deine Threads passen besser ins Anfängerforum, schreibst ja schließlich selber das du grade erst dabei bist die ersten Kapitel der Insel durchzulesen.
3. Lern Java anhand von kleinen, selbstgeschriebenen Beispielen. Ignorier deinen riesen Code einfach mal ein paar Monate komplett, ansonsten wirste noch verrückt :wink:
 
D

Developer_X

Gast
Registrieren tu ich mich nicht hier, weil ihr mich vielleicht rauswerfen wollt, weil ich sehr viele Fragen stelle, nicht böse gemeint von mir, aber was manche als Spammen empfinden könnten, deshalb net.
 

0x7F800000

Top Contributor
nna... da gibt's aber wesentlich bessere methoden die leute positiver zu stimmen: etwa öfters in der Insel lesen ;)
 

L-ectron-X

Gesperrter Benutzer
Developer_X hat gesagt.:
Registrieren tu ich mich nicht hier, weil ihr mich vielleicht rauswerfen wollt, weil ich sehr viele Fragen stelle, nicht böse gemeint von mir, aber was manche als Spammen empfinden könnten, deshalb net.
Das ist Blödsinn. Es gibt nur einen, der dich rauswerfen kann, der Admin. Und der wird sich erst mit den Mods kurzschließen.

Und niemand wird hier rausgeworfen, weil er viele Fragen stellt.

Also: Anmelden! :wink:
 

hdi

Top Contributor
Registrieren tu ich mich nicht hier, weil ihr mich vielleicht rauswerfen wollt, weil ich sehr viele Fragen stelle, nicht böse gemeint von mir, aber was manche als Spammen empfinden könnten, deshalb net.

Also ich bitte dich... Sowas passiert ganz bestimmt nicht, dieses Forum ist dafür da, Fragen zu stellen.
Mag sein dass du ein bisschen was "kassiert" hast von einigen Leuten (ja, auch mir xD), aber jetzt da du endlich
die Java-Insel liest, zeigt es deine Bemühungen und dann kommen auch keine dummen Kommentare mehr.

Das hier ist auch eine Community, so seh ich das zumindest, d.h. du solltest dich als Teil dieser Community sehen,
und dich registieren.

Ausserdem musst du nicht jedesmal deinen Namen eingeben beim Erstellen eines Posts, und man kann dir
PN's schicken, sowie PN's von dir erhalten.

PS: Und wenn wir dich "rauswerfen" kannst du uns noch immer als Gast zumüllen ;)

edit: Na also geht doch :toll:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
V Designfrage: try-catch-throws Allgemeine Java-Themen 11
C OpenJDK - FileReader throws FileNotFoundException Allgemeine Java-Themen 19
S was bedeutet: throws IOException Allgemeine Java-Themen 1
U throws exception . Allgemeine Java-Themen 2
Jose05 Umgang mit Exceptions in einen Programm Allgemeine Java-Themen 2
M Exceptions - wann / wie verwenden? Allgemeine Java-Themen 4
W Exceptions behandeln Allgemeine Java-Themen 16
Kirby.exe Exceptions erklärt Allgemeine Java-Themen 5
L Operatoren Java Reflections: Alle Methoden einer Klasse aufrufen ohne Exceptions Allgemeine Java-Themen 5
E Java Editor Problem mit 2er Exceptions Allgemeine Java-Themen 12
B Maven Keycloak library wirft exceptions nach maven package Allgemeine Java-Themen 1
J Exceptions Allgemeine Java-Themen 1
Z Java Exceptions - Auf leeres Feld prüfen Allgemeine Java-Themen 10
E Exceptions abfangen und dann Programm stoppen - aber wie? Allgemeine Java-Themen 2
L Nullpointer Exceptions werden nicht angezeigt Allgemeine Java-Themen 5
V Exceptions Allgemeine Java-Themen 2
G Exceptions mit jre 7u40 Allgemeine Java-Themen 2
S Best Practice verschiedene Exceptions fangen und neue Exception erzeugen Allgemeine Java-Themen 11
E LookAndFeel Exceptions bei UIManager.setLookAndFeel Allgemeine Java-Themen 4
W JavaDoc Runtime-Exceptions: Wie sinnvoll anzeigen? Allgemeine Java-Themen 14
C Threads und Exceptions Allgemeine Java-Themen 7
B Webstart Exceptions Allgemeine Java-Themen 7
R Threads Exceptions von Threads abfangen im ThreadPool Allgemeine Java-Themen 5
S Runtime Exceptions in eine Datei schreiben Allgemeine Java-Themen 7
G Internationalisierung von Exceptions Allgemeine Java-Themen 5
J JUnit - werfen von Exceptions testen Allgemeine Java-Themen 17
F Alle Exceptions abfangen Allgemeine Java-Themen 4
B Alle Exceptions auf einmal abfangen Allgemeine Java-Themen 4
G log4j - Behandlung nicht explizit abgefangener Exceptions Allgemeine Java-Themen 5
B Logging von Exceptions Allgemeine Java-Themen 7
G Designfrage: Exceptions in Konstruktoren Allgemeine Java-Themen 7
I Exceptions - weder catch- noch finally-Klausel funktioniert Allgemeine Java-Themen 12
M Verwendung von unchecked exceptions & bereits vorhandenen exceptions was priorisieren Allgemeine Java-Themen 3
hdi Verhalten bei nicht behandelten Exceptions Allgemeine Java-Themen 2
H Exceptions und IO Allgemeine Java-Themen 17
B Exceptions? Allgemeine Java-Themen 4
M Verständnisfrage Exceptions Allgemeine Java-Themen 2
V Exceptions als Fehlerbehandlung "missbrauchen"? Allgemeine Java-Themen 10
DEvent Wie behandelt man Exceptions in Iterator? Allgemeine Java-Themen 2
J Verständnisfrage zu exceptions Allgemeine Java-Themen 3
A Junit Exceptions testen Allgemeine Java-Themen 3
R Loading-Thread und Exceptions abfangen. Allgemeine Java-Themen 4
P Exceptions dokumentieren. Allgemeine Java-Themen 6
G Exceptions weiterwerfen Allgemeine Java-Themen 2
T Generics und Exceptions Allgemeine Java-Themen 6
P Exceptions throw Allgemeine Java-Themen 6
F Wann und wie Exceptions einsetzen? Allgemeine Java-Themen 13
J Method.invoke -> Exceptions der Funktion abfangen Allgemeine Java-Themen 5
T Frage zu Exceptions Allgemeine Java-Themen 3
G Java-Exceptions werden nicht ganz angezeigt. Wo ändern? Allgemeine Java-Themen 3
J Probleme mit Exceptions Allgemeine Java-Themen 11
R Exceptions mit aktuellen Programminformationen ausgeben? Allgemeine Java-Themen 2
märliprinz com.sap.dbtech.jdbc.exceptions.JDBCDriverException Allgemeine Java-Themen 2
G Alle Exceptions loggen Allgemeine Java-Themen 4
G Frage zu Exceptions Allgemeine Java-Themen 6
M err oder alle Exceptions eines Programms abfangen Allgemeine Java-Themen 4
G Exceptions ohne Zeilennummer (Unknown Source) Allgemeine Java-Themen 8
T Exceptions im statischem Klassencode Allgemeine Java-Themen 5

Ähnliche Java Themen


Oben