ich wollte mal ein praktisches Fenster programmieren die die Anwendung von mehreren Schleife demonstrieren soll. Dazu habe ich mit JavaFX ein Windowfenster programmiert(FXML). Schleifen sollten dort formuliert werden und dann ausgeführt werden. Die Ursprungsformel for(int i =10;i<50;i++) sollte wie folgt for (int i = anfangswert; i<Endwert;i++ ) im Programm
Java:
voidbutoneinmal(ActionEvent event){
lzalerein1 =Integer.valueOf(lzaler1.getText());//holt text aus Textfield und wandelt in zahl um//
lendein1 =Integer.valueOf(lend1.getText());for(int i=voidbutoneinmal(ActionEvent event){
lzalerein1 =Integer.valueOf(lzaler1.getText());
lendein1 =Integer.valueOf(lend1.getText());for(int i= lzalerein1 ; i < lendein1;}
Kannst Du den Code mal halbwegs formatiert zwischen [code] [/code] setzen? Das kann ja kein Mensch lesen. Außerdem sieht es aktuell so aus, als wäre der "Code" gespickt mit Fehlern.
ok ich habe etwas entdeckt wenn man den Text in Integer umwandelt und dann die Variable mit system.out.println ... und die String Variante aus dem Kontexr aussucht entsteht mischmasch die anscheinend die obere Zeile verdirbt.
ok ich habe etwas entdeckt wenn man den Text in Integer umwandelt und dann die Variable mit system.out.println ... und die String Variante aus dem Kontexr aussucht entsteht mischmasch die anscheinend die obere Zeile verdirbt.
Ganz grundsätzlich: das ist einer der unleserlichsten Codes die ich hier bisher gesehen habe.
Und offensichtlich geht es dir nicht anders, oder ist dir aufgefallen, dass die Variable, die du in der Schleife ausgeben lässt, nirgendwo anders zugewiesen wird?
Java:
lzalerein1 =Integer.valueOf(lzaler1.getText());
lendein1 =Integer.valueOf(lend1.getText());for(int i = lzalerein1 ;(lzalerein1)<(lendein1);lzalerein1++){System.out.print(izalerein1);}
Ja wie gesagt im Anfangsstadium. Ich kämpfe zur Zeit mit dem Textfield der Umwandlung und der praktischen Umsetzung die Werte in die Formel zu übertragen. Ich programmiere mit Eclipse. Und wenn ich hinter System einen Punkt setze tauchen die Optionsliste auf die Anzeigen was mit der Funktion System machbar ist. Wählt man> out< aus und setzt wieder einen Punkt dann kommt wieder die Optionsliste wählt man wie in meinem Beispiel> print (String)< aus hatte ich das Problem das die For Schleife Fehler anzeigt die unerklärlich sind(erzeugt wohl aus der Umwandlung den Ursprung teilweise zurück. Einige variablen sind integer einige String werden deswegen unterstrichen und wenn man mit der Maus drüberfährt erscheint Mischmasch. Zur Zeit kämpfe ich mit dem Textfield. Das nur eingaben mit Enter akzepziert und überträgt. Hat man die Zahl geändert ohne Enter wird die alte Zahl beibehalten. Im scenebuilder gibt es keine funktion lost focus. Gibt es diese Funktion? Und was trage ich in das FXML Dokument ein ? und muß ich dazu noch Klassen importieren?
ja sicher aber dieses Projekt sollte sowas wie eine Testumgebung werden. Die Werte könnten auch in jede Formel eingebunden werden . Und der Button als Startknopf für die Berechnungen.Verschiednene Buttons könnten andere Formeln auslösen. Es ist ein Untershied eine Formel zu ändern und jedesmal neu zu kompilieren oder man kann es bequem in ein Fenster eintragen. Was meiner Meinung nach Praxisnäher ist und mehr Spaß macht oder?
Dann fang ganz einfach mit zwei Eingabefeldern und einem Button an und tu dir selbst einen Gefallen, indem du ordentliche Namen vergibst. Das was du da hast ist das pure Grauen...
PS: wie meinst du das mit zuweisen? Der Textfield Eintrag wird der zugewiesenen Variable übergeben. Und die Formel wird durch den Button mit den aktuellen Werten durchgeführt.
du hast gefragt ob Ich meine Korrektur ausprobiert habe. Ja hab ich. Ergebnis Fehlermeldung wenn ich auf Button drücke. Gebe ich 10 mit enter im Textfield Iend1ein gibt das System out 10 zurück der Button löst eine Fehlermeldung aus. gebe ich im Textfiel lzaler 0 mit enter ein. schreibt das System out"0" und der Button löst die zeile 0000000000 aus(also wird die schleife ausgeführt) ohne die erste Zeile >int lzalerein1 = 0< und 0 mit enter inder eingabe im Textfield lzahlerl wurde ebenfalls fehler angezeigt aber nicht wenn ich 1mit enter eingegeben habe.
Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1774)
at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1657)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.Node.fireEvent(Node.java:8413)
at com.sun.javafx.scene.control.behavior.TextFieldBehavior.fire(TextFieldBehavior.java:179)
at com.sun.javafx.scene.control.behavior.TextInputControlBehavior.callAction(TextInputControlBehavior.java:178)
at com.sun.javafx.scene.control.behavior.BehaviorBase.callActionForEvent(BehaviorBase.java:218)
at com.sun.javafx.scene.control.behavior.TextInputControlBehavior.callActionForEvent(TextInputControlBehavior.java:127)
at com.sun.javafx.scene.control.behavior.BehaviorBase.lambda$new$74(BehaviorBase.java:135)
at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.Scene$KeyHandler.process(Scene.java:3964)
at javafx.scene.Scene$KeyHandler.access$1800(Scene.java:3910)
at javafx.scene.Scene.impl_processKeyEvent(Scene.java:2040)
at javafx.scene.Scene$ScenePeerListener.keyEvent(Scene.java:2501)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$KeyEventNotification.run(GlassViewEventHandler.java:217)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$KeyEventNotification.run(GlassViewEventHandler.java:149)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleKeyEvent$353(GlassViewEventHandler.java:248)
at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleKeyEvent(GlassViewEventHandler.java:247)
at com.sun.glass.ui.View.handleKeyEvent(View.java:546)
at com.sun.glass.ui.View.notifyKey(View.java:966)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at sun.reflect.misc.Trampoline.invoke(Unknown Source)
at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at sun.reflect.misc.MethodUtil.invoke(Unknown Source)
at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1769)
... 53 more
Caused by: java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.valueOf(Unknown Source)
at applicationsch.MainWindowController.oactwert2(MainWindowController.java:121)
... 63 more wenn
man nur Enter drückt.
Habe festgestellt das ein heilloses Durcheinander entstaanden war die ursprüngliche Verknüpfungen der Aktions e
Events falsch zugeordnet waren (nicht den richtigen Felder). Die Folgen waren jedemenge rote Sätze und am Ende JavaFX4576 in blau (mit Verschiedenen Nummern).Mit Sytembuilder neu zugeordnet. Eine 0 oder eine Zahl mit enter ergab nach Korrektur macht jetzt keine Fehlermeldung.
Wenn man beim Stacktrace jetzt ganz runterläuft dann kommt man an die Stelle:
Code:
Caused by: java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.valueOf(Unknown Source)
at applicationsch.MainWindowController.oactwert2(MainWindowController.java:121)
Das in deinem MainWindowController in der Zeile 121 der Fehler ausgelöst wird, weil der input string nämlich leer ist - wie in der Message.
Du musst nicht unbedingt für jeden Button oder für jedes Textfeld einen separaten Handler haben. Über den Parameter der Methode vom Typ "ActionEvent" kannst du herausfinden was die Quelle des Events gewesen ist:
Außerdem brauchst du sowieso keine EventHandler für die Textfelder, denn: Du möchtest eine Aktion ausführen, sobald ein Button gedrückt wird. Es ist also ausreichend dafür einen Handler zu schreiben, der sich die benötigten Daten aus den Feldern liest. So wie du es eigentlich bereits gemacht hast:
Mach einen try...catch-Block um die Umwandlung von String nach Integer, damit du abfangen kannst, wenn kein gültiger Wert in das Textfeld eingegeben wurde.
Es ist guter Stil, lokale Variablen erst zu deklarieren, wenn sie benötigt werden. Diese ganze Litanei an Variablen, die du am Anfang deklarierst ist vermutlich unnötig.
Du musst nicht unbedingt für jeden Button oder für jedes Textfeld einen separaten Handler haben. Über den Parameter der Methode vom Typ "ActionEvent" kannst du herausfinden was die Quelle des Events gewesen ist:
Für jeden Button eine Methode ist aber häufig guter Stil
Sonst hat man schnell eine Methode, die alles macht, und würde das ziemlich schnell sowieso zu mehreren Methoden refactoren.
Wenn ein aktion event im FXML Dokument formuliert ist und kein im Controller meckert das FXML dokument (was dort sehr unauffälig ist) und umgekehrt. Die Folge ist ähnlich meiner sonstigen Fehlermeldungen und das programmierte Window geht nicht auf. Fehler imFXML werden zwar unterstrichen aber so schwach das man besonders gut hinsehen muß. Ich programmiere gerade mit einem Laptop und manchmal springt der Cursor irgendwohin. Sehr nervig.
Habe in den ersten 3 Zeilen jeweils die werte 1 1 10 1 1 10 1 1 10 mit Enter eingegeben. Werden auch im System out angezeigt. Bei auslösen der ersten 3 Button hängt er sich bei Ausgabe 3 auf