Archiv für die Kategorie ‘Java’

Java Heap Size definieren

Damit ich nicht jedes Mal wieder nach sehen muss, wie die Heap-Size mittels JAVA_OPTS definiert werden kann, schreibe ich es mal kurz hier auf.

-Xms – initiale Größe des Heap
-Xmx – maximale Größe des Heap

Java 5.0u16 Downloads

Falls jemand aus Gründen, so wie ich, auf der Suche nach der oben genannten alten Version von Java sein sollte, nachfolgend die Downloadlinks.

Java SE Development Kit 5.0u16

Java SE Runtime Environment 5.0u16

InvalidKeyException

Wenn man die folgende Exception erhält, so ist dies nicht zwingend ein Indiz dafür, dass man etwas falsch gemacht hat, sondern es ist möglich, dass einfach nur noch etwas am JRE gemacht werden muss.

Exception in thread "main" java.security.InvalidKeyException: Illegal key size or default parameters

Will man bspw. eine Verschlüsselung durchführen und hierbei eine bestimmte Schlüssellänge verwenden, so kommt es zu dieser Fehlermeldung, wenn man vorher nicht die »Unlimited Strength Jurisdiction Policy Files« für Java heruntergeladen und “installiert” hat. Nachfolgend die Links zum benötigten Download für die jeweiligen Java Versionen.

Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 5.0
Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 6

Einfach für die im Einsatz befindliche Version herunterladen und die Zip-Datei entpacken. Von den entpackten Dateien interessieren uns nur die beiden *.jar Dateien. Diese kopieren wir in das Verzeichnis der JRE. Dies befindet sich in der Regel unterhalb von »C:\Program Files\Java\jre6« für die Version 6. Die beiden Dateien müssen aber nicht im Hauptverzeichnis abgelegt werden, sondern im Verzeichnis »Security«. Der komplette Pfad sollte also wie folgt aussehen:

C:\Program Files\Java\jre6\lib\security

Zur Sicherheit die beiden vorhandenen Dateien »local_policy.jar« und »US_export_policy.jar« umbenennen und danach die beiden Dateien aus dem Download einfügen.

Im Anschluss kann man dann sein Programm ausführen und wird nicht mehr die Exception erhalten, die auf diese beiden Dateien zurückzuführen ist. Wichtig ist noch, dass man die beiden im richtigen Verzeichnis von Java abgelegt. Hierbei ist zu berücksichtigen, dass sowohl die x86 als auch die x64 Variante des JRE auf einem Rechner vorhanden sein können. Den richtigen Pfad kann man zur Not auch einfach mittels eines Einzeilers in Java ermitteln.

System.out.println( System.getProperty("java.home") );

Java: Vergleich von Strings

Will man in Java zwei Strings miteinander vergleichen, so muss hierbei aufpassen bzw. sollte eigentlich immer nur einen Weg verwenden. Schauen wir uns aber zunächst ein einfaches Beispiel in Java an.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
public class StringTest {
	public static void main(String[] args) {
		String vsTest1 = "Hallo";
		String vsTest2 = new String("Hallo");
		String vsTest3 = new String("Erst das");
		vsTest3 = "Hallo";
 
		System.out.println("");
		System.out.println( " vsTest1: " + vsTest1 );
		System.out.println( " vsTest2: " + vsTest2 );
		System.out.println( " vsTest3: " + vsTest3 );
		System.out.println("");
 
		if ( vsTest1 == vsTest2 )
			System.out.println (" '==' Vergleich: vsTest1 und vsTest2 sind gleich ");
		else
			System.out.println (" '==' Vergleich: vsTest1 und vsTest2 sind nicht gleich ");
 
		if ( vsTest1.equals(vsTest2) )
			System.out.println (" 'equals' Vergleich: vsTest1 und vsTest2 sind gleich ");
		else
			System.out.println (" 'equals' Vergleich: vsTest1 und vsTest2 sind nicht gleich ");
		System.out.println("");
		if ( vsTest1 == vsTest3 )
			System.out.println (" '==' Vergleich: vsTest1 und vsTest3 sind gleich ");
		else
			System.out.println (" '==' Vergleich: vsTest1 und vsTest3 sind nicht gleich ");
 
		if ( vsTest1.equals(vsTest3) )
			System.out.println (" 'equals' Vergleich: vsTest1 und vsTest3 sind gleich ");
		else
			System.out.println (" 'equals' Vergleich: vsTest1 und vsTest3 sind nicht gleich ");
	}
}

Führt man dieses Programm nun aus, so erhält man die folgende Ausgabe:

1
2
3
4
5
6
7
8
9
 vsTest1: Hallo
 vsTest2: Hallo
 vsTest3: Hallo
 
 '==' Vergleich: vsTest1 und vsTest2 sind nicht gleich
 'equals' Vergleich: vsTest1 und vsTest2 sind gleich
 
 '==' Vergleich: vsTest1 und vsTest3 sind gleich
 'equals' Vergleich: vsTest1 und vsTest3 sind gleich

Für den geübten Java Programmierer wird dies jetzt keine Neuigkeit sein, für Einsteiger aber wahrscheinlich schon.
Schauen wir uns es nun aber Schritt für Schritt an.

Obwohl alle drei String Variablen den gleichen Inhalt haben (Zeile 1-3 der Ausgabe), so schlägt zumindest der “==”-Vergleich bei vsTest1 und vsTest2 fehl bzw. erkennt eine nicht Gleichheit. Wie kommt es hierzu?

Da für vsTest2 ein neues Objekt mittels ‘new String(“Hallo”)’ erzeugt wurde, schlägt die Prüfung mittels “==”-Vergleich fehl, da dieser Vergleich einfach einen Vergleich der Objekte und nicht der Werte durchführt.

Als Fazit hieraus kann man nur ziehen, dass ein Vergleich von zwei Strings immer nur mittels ‘equals’ oder ‘compareTo’ vornehmen sollte. Weiterführende Informationen findet man in den Links, wobei besonders Link 3 eine schöne Zusammenfassung bietet.

Weiterführende Informationen:

  1. Methode ‘equals (Object)’
  2. Methode ‘compareTo(String)’
  3. Java: ==, .equals(), compareTo(), and compare()