# String über GUI verschlüsseln



## Dr.Ikarus (4. Nov 2009)

Hallo zusammen,

ich habe folgendes Problem:
ich möchte in ein GUI ein Wort eingeben, welches dann per Button verschlüsselt werden soll. Die Verschlüsselung wird über einen Key, der aus Zahlen besteht vorgenommen.

Bevor ich jetzt zu dem GUI komme habe ich erstmal eine Frage:

Ich habe eine Klasse Enigma mit den Methoden encrypt und decrypt, sowie eine Klasse Inout, die über die Konsole bedient werden soll. Wenn ich in die Konsole ein Wort und einen Schlüssel eingebe dann bekomme ich aber eine Fehlermeldung.
Und zwar: java.lang.NullPointerException
Ich hab schon gelesen was das bedeutet, aber irgendwie scheint meine Fehlersuche nichts zu bringen.

Hier ist der Enigma Code:





```
public class Enigma implements Cipher{
	public static void main (String[]args){}
	@Override
	public String decrypt(String cryptText, int key) {// Entschlüsseln
		StringBuffer ergebnis = new StringBuffer();
		key %= 26;
		for (int i = 0; i < cryptText.length(); i++) {
			int min = 65, max = 90;
		}
				return null;
	}

	@Override
	public String encrypt(String plainText, int key) {// Verschlüsseln
		String ergebnis = "";
		key %= 26;
		for (int i = 0; i < plainText.length(); i++) {
			int min = 65, max = 90;
			int c = plainText.charAt (i);
			if ((c<'A')||(c>'z')||(c>'Z')&&(c<'a')){
				ergebnis +=((char)c);
				continue;
			}
			if (c>max) {
				min += 32;
				max += 32;
			}
			int cc = c + key;
			if (cc > max)
				c= cc - 26;
			else
				c= cc;
			ergebnis +=((char) c);
		}
		return ergebnis.toString();
		
	}}
```






Und hier die Inout Klasse:


```
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
	
	
public class Inout {

	public static void main(String[] args) {
			// TODO Auto-generated method stub
	BufferedReader in = new BufferedReader (new InputStreamReader(System.in));
		try {
			System.out.print("Geben Sie das Wort ein:");
			String text = in.readLine();
			System.out.print("Geben Sie den Schlüssel ein: ");
			Object key = Integer.parseInt (in.readLine());
			
			Enigma st = new Enigma();
			String aus = st.encrypt(text, 5);
			
			System.out.printf((""));
			}catch (IOException e){}

	}}
```


Die Fehlermeldung inklusive testwerte für die Konsole sieht dann folgendermaßen aus:

Geben Sie das Wort ein:Hallo
Geben Sie den Schlüssel ein: 5
Exception in thread "main" java.lang.NullPointerException
	at Enigma.encrypt(Enigma.java:18)
	at Inout.main(Inout.java:21)


Ich versuche jetzt seit Montag den Fehler zu finden, aber ich häcks nich mehr, vielleicht habt ihr einen Denkanstoß?

Vielen Dank schonmal
Ikarus


----------



## faetzminator (4. Nov 2009)

[c]text[/c] wird wohl [c]null[/c] sein?


----------



## Dr.Ikarus (4. Nov 2009)

Danke, aber ich weiß nicht was du meinst


----------



## ttplayer (4. Nov 2009)

Weißt du, was null ist?

Und ich glaub, der Fehler liegt im oberen Teil, der Untere ohne das Enigma funktioniert bei mir jedenfalls.

PS: Was bringt das 
	
	
	
	





```
System.out.printf((""));
```


----------



## Swoop (5. Nov 2009)

2 Tipps :

warum machst du 
	
	
	
	





```
return null
```

dann kannst du auch gleich die Methode auf void setzen!

und am besten nimmst du Variablen Namen die auch eine bedeutung haben... mit z, c, cc und sowas wird es schwer dort durchzusteigen!


----------



## Swoop (5. Nov 2009)

ttplayer hat gesagt.:


> Weißt du, was null ist?
> 
> Und ich glaub, der Fehler liegt im oberen Teil, der Untere ohne das Enigma funktioniert bei mir jedenfalls.
> 
> ...



Das bringt eine leerzeiche ... ist also das gleiche wie \n


----------



## Dr.Ikarus (5. Nov 2009)

Okay, danke, das hab ich schon geändert.

```
return cryptText;
```

Allerdings kommt immernoch ein Nullpointer fehler, da muss ich nochmal schauen.


----------



## Sonecc (5. Nov 2009)

Öhm, sicher da Cipher ein Interface ist?
Cipher (Java 2 Platform SE v1.4.2)
Sagt da was anderes...
Und allgemein hab ich es nicht geschafft, irgendwie ein lauffähiges Beispiel zustande zu kriegen, solange Cipher implementiert werden soll...
Nimmt man das allerdings weg, läuft es (ohne jegliche Exception)


----------



## Dr.Ikarus (8. Nov 2009)

Danke für eure Hilfe,
ich habs nochmal neu geschrieben und jetzt läuft's

Hab allerdings ne andere Frage.

Ich hab einen Button, der auf Druck ein neues Fenster öffnet, aus dem man TextDateien anklicken kann...ähnlich dem Öffnen Fenster in Windows.
Wenn ich jetzt eine Datei anwähle und öffne wird in der konsole nicht der Inhalt angezeigt, sondern nur der Dateiname.

Wie bekomme ich es hin, den Inhalt der Textdatei anzuzeigen?
Da muss ich ja wahrscheinlich in der Zeile

```
System.out.println(selectedFile.getName());
```

etwas ändern?
Oder sollte ich an geeigneter Stelle einen Buffered Reader einbauen?

Bisher hab ich folgenden Code:

```
input.addActionListener(new ActionListener() {
		      public void actionPerformed(ActionEvent ae) {
		        JFileChooser fileChooser = new JFileChooser();
		        int returnValue = fileChooser.showOpenDialog(null);
		        if (returnValue == JFileChooser.APPROVE_OPTION) {
		          File selectedFile = fileChooser.getSelectedFile();
		          System.out.println(selectedFile.getName());
		        }
		      }
		    });
```


Danke für eventuelle Hilfe!


----------

