split()-Methoden problem

Das scheint an der Zeichenkodierung zu liegen. Laut meinem Editor ist die Textdatei in UTF-8 kodiert und ich vermute mal, dass du die Datei wohl in ANSI einliest.

Hier mal mein Test-Code:
Java:
package de.tutorials.forum.hilfe.yax.vokabeldatei;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.Charset;

public class VokabelnTest {
	public static void main(String[] args) throws IOException {
		BufferedReader in = new BufferedReader(new InputStreamReader(
				new FileInputStream(new File("vokabeln.txt")),
				// Charset.forName("ISO-8859-1")));
				Charset.forName("UTF-8")));

		System.out.println(in.readLine());
		
		in.close();
	}
}

Ausgabe mit UTF-8:
deutschvokabel.englischvokabel
Ausgabe mit ISO-8859-1:
deutschvokabel.englischvokabel

Wie man sieht, wird der Dateiinhalt beim Einlesen mit UTF-8-Kodierung richtig dargestellt.
 
Suuuper, Danke :) Jetzt hat es endlich geklappt. :)

Aber ich hab schon wieder eine Frage :(

Und nähmlich, wenn ich in der Datei jetzt mehrere Zeilen mit Vokabeln stehen hab, also in der ersten Zeile "Mathe.math", in der zweiten "Hund.dog", und so weiter, wie kann ich es dann ermöglichen, dass wenn ich auf einen Button klicke das dann erst der erste Teil (vorm Punkt) der ersten Zeile in ein JLabel kommt und nach einer Eingabe in ein TextField überprüft wird ob es mit dem 2. Teil übereinstimmt. (Wahrscheinlich mit equals()) So und wenn ich wieder auf den Button drücke soll der 1. Teil der nächsten Zeile kommen, und immer so weiter...

Ich hab gedacht mit einer While-Schleife. Oder nicht?
 
Lass die Datei einfach offen (schließen erst am Programmende)

Sobald der Button gedrückt wurde, liest du eben eine Zeile ein...es ist sowieso von selber immer die nächste.
 
Also ich habe die Datei am Anfang des Programms geöffnet. Aber wenn ich jetzt einmalden Button drücke, er zeigt die Erste vokabel an. Aber wenn ich nochmal draufdrücke um die 2. Vokabel zu beckommen, bekomme ich eine Fehlermeldung und die erste Vokabel ist immer noch angezeigt.

(Wenn ich die Datei am Ende schließe gibt er nur eine Fehlermeldung aus.)

Hier mein Code:

Code:
public void actionPerformed(ActionEvent evt) {
				
		 
		        try {
		        	String vokabel = in.readLine();
		        	String[] array = vokabel.split("\\.");
		        	
		        	jTextField1.setText(array[0]);
		        	
					System.out.println(vokabel);
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
		        
		        
			}

Hier die Fehlermeldung :

Code:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at Vokabeltrainer$2.actionPerformed(Vokabeltrainer.java:74)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(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.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)

Hat jemand eine Idee?
 
Also nicht meckern, ich hab alles nochmal neu geschrieben. Aber hier mein Code:

Code:
import java.awt.*;
import java.awt.event.*;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.Charset;

import javax.swing.*;
import javax.swing.event.*;

/**
 * 
 * Beschreibung
 * 
 * @version 1.0 vom 06.09.2010
 * @author
 */

public class Vokabeltrainer extends JFrame {
	// Anfang Attribute
	private JTextField jTextField1 = new JTextField();
	private JTextField jTextField2 = new JTextField();
	private JButton jButton1 = new JButton();
	private JButton jButton2 = new JButton();
	private JLabel jLabel1 = new JLabel();
	private JLabel jLabel2 = new JLabel();

	// Ende Attribute

	public Vokabeltrainer(String title) throws Exception {
		// Frame-Initialisierung
		super(title);
		setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
		int frameWidth = 580;
		int frameHeight = 327;
		setSize(frameWidth, frameHeight);
		Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
		int x = (d.width - getSize().width) / 2;
		int y = (d.height - getSize().height) / 2;
		setLocation(x, y);
		Container cp = getContentPane();
		cp.setLayout(null);
		// Anfang Komponenten
		final BufferedReader in = new BufferedReader(new InputStreamReader(
				new FileInputStream(new File(
						"C:\\Users/Yanik/Pictures/Documents/vokabeln.txt")),
				// Charset.forName("ISO-8859-1")));
				Charset.forName("UTF-8")));
		jTextField1.setBounds(200, 64, 361, 24);
		jTextField1.setText("");
		cp.add(jTextField1);
		jTextField2.setBounds(200, 112, 361, 24);
		jTextField2.setText("");
		cp.add(jTextField2);
		jButton1.setBounds(416, 240, 145, 49);
		jButton1.setText("Abbrechen");
		jButton1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent evt) {
				jButton1_ActionPerformed(evt);
			}
		});
		cp.add(jButton1);
		jButton2.setBounds(256, 240, 145, 49);
		jButton2.setText("Weiter");
		jButton2.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent evt) {
				
		 
		        try {
		        	String vokabel = in.readLine();
		        	String[] array = vokabel.split("\\.");
		        	
		        	jTextField1.setText(array[0]);
		        	
					System.out.println(vokabel);
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
		        
		        
			}
		});
		cp.add(jButton2);
		jLabel1.setBounds(24, 64, 149, 24);
		jLabel1.setText("Deutschvokabel");
		jLabel1.setFont(new Font("MS Sans Serif", Font.BOLD, 17));
		cp.add(jLabel1);
		jLabel2.setBounds(24, 112, 154, 24);
		jLabel2.setText("Englischvokabel");
		jLabel2.setFont(new Font("MS Sans Serif", Font.BOLD, 17));
		cp.add(jLabel2);
		// Ende Komponenten
		
		
		
		

		setResizable(false);
		setVisible(true);
	}

	// Anfang Methoden
	public void jButton1_ActionPerformed(ActionEvent evt) {
		System.exit(0);
	}

	public void jButton2_ActionPerformed(ActionEvent evt) throws Exception {
		
	}

	// Ende Methoden

	public static void main(String[] args) throws Exception {
		new Vokabeltrainer("Vokabeltrainer");
	}
}

Und die Datei:

Code:
hund.dog
Katze.cat
Maus.mouse
 
Damit das nicht jeder zu Hause testen muss, gibt doch bei jedem actionPerformed aus, was du aus der Datei gelesen hast. Also nach Zeile 73, dann erübrigt sich deine Frage womöglich. Und dann poste bitte die Ausgabe.
 

Neue Beiträge

Zurück