In JField eine Kommazahl darstellen java.lang.NumberFormatException

  • Themenstarter Themenstarter Marx
  • Beginndatum Beginndatum
M

Marx

Gast
Hallo zusammen,

ich möchte gern den aktuellen Wert (Kommazahl) eines JSliders in einem Eingabefeld anzeigen. Erhalte jedoch die java.lang.NumberFormatException, wenn ich den Slider bewege. Die Konsolenausgabe klappt. Die Ausgabe im Eingabefeld funktioniert nicht.

Bin ich nun gezwungen, mich mit JFormattedTextField herumzuschlagen oder geht es auch anders??

anlegen des Sliders
Java:
[...]
this.ySlider = new JSlider( 0, 1000, 500 );
this.yuvPanel.add( this.ySlider );
this.ySlider.addChangeListener( this ); 

[...]

public void stateChanged( final ChangeEvent e ) {
[...]
             System.out.println(String.valueOf((double)this.ySlider.getValue() / 1000));
//             String txt = String.valueOf((double)this.ySlider.getValue() / 1000);
//		              		System.out.println(txt);
             this.yTextField.setText( "" + String.valueOf((double)this.ySlider.getValue() / 1000)  );
[...]
}

Danke Vielmals
 
Sicher dass dieser Code für die Exception verantwortlich ist? Wie lautet denn die genaue Meldung und auf welche Codezeile verweist sie?
Java:
	public static void main(String[] args) throws Exception {
		JFrame frame = new JFrame();
		JPanel panel = new JPanel();
		final JSlider ySlider = new JSlider( 0, 1000, 500 );
		final JTextField yTextField = new JTextField(10);
		ySlider.addChangeListener( new ChangeListener() {
			
			@Override
			public void stateChanged(ChangeEvent e) {
				 System.out.println(String.valueOf((double)ySlider.getValue() / 1000));
	             yTextField.setText(String.valueOf((double)ySlider.getValue() / 1000)  );
			}
		} ); 
		 
		panel.add(ySlider);
		panel.add(yTextField);
		frame.add(panel);

		frame.pack();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setLocationRelativeTo(null);
		frame.setVisible(true);
	}

funktioniert ohne Probleme...
 
Die Exception verweist auf die else if Anweisung in der stateChanged()

(1.Zeile)

Java:
} else if( e.getSource() == this.ySlider && Integer.parseInt( this.yTextField.getText() ) != this.ySlider.getValue() ) {
				
				System.out.println(String.valueOf((double)this.ySlider.getValue() / 1000));
				String txt = String.valueOf((double)this.ySlider.getValue() / 1000);
//				System.out.println(txt);
				this.yTextField.setText( "" + String.valueOf((double)this.ySlider.getValue() / 1000)  );
				
				int red   = (int) ((int)this.rSlider.getValue()*0.299);
				int green = (int) ((int)this.gSlider.getValue()*0.587);
				int blue  = (int) ((int)this.bSlider.getValue()*0.114);
				
				this.currentColor = new Color(red, green, blue);
[...]
			}

Das ist die Exception, die er wirft, wenn ich den Regler bewege:

Java:
0.5
Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "0.5"
	at java.lang.NumberFormatException.forInputString(Unknown Source)
	at java.lang.Integer.parseInt(Unknown Source)
	at java.lang.Integer.parseInt(Unknown Source)
	at computergrafik.a1.ColorConverterJFrame.stateChanged(ColorConverterJFrame.java:264)
	at javax.swing.JSlider.fireStateChanged(Unknown Source)
	at javax.swing.JSlider$ModelListener.stateChanged(Unknown Source)
	at javax.swing.DefaultBoundedRangeModel.fireStateChanged(Unknown Source)
	at javax.swing.DefaultBoundedRangeModel.setRangeProperties(Unknown Source)
	at javax.swing.DefaultBoundedRangeModel.setValue(Unknown Source)
	at javax.swing.JSlider.setValue(Unknown Source)
	at javax.swing.plaf.basic.BasicSliderUI.scrollByUnit(Unknown Source)
	at javax.swing.plaf.metal.MetalSliderUI.scrollDueToClickInTrack(Unknown Source)
	at javax.swing.plaf.basic.BasicSliderUI$TrackListener.mousePressed(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.awt.EventQueue.access$000(Unknown Source)
	at java.awt.EventQueue$1.run(Unknown Source)
	at java.awt.EventQueue$1.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue$2.run(Unknown Source)
	at java.awt.EventQueue$2.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)

Ich finde es dennoch seltsam, warum er bei der Konsolenausgabe keine Probleme hat, jedoch mit dem Eingabefeld.
 
Naja, probiers doch mal mit Double.parseDouble anstelle von Integer.parseInt 🙂 Ein 0.5 (was vemrutlich dein Defaultwert für das Textfeld ist) sowie die anderen Sliderwerte lassen sich eben nicht zu einem Integer parsen!
 

Zurück
Oben