Discussion:
Hauptklasse wird nicht gefunden
(zu alt für eine Antwort)
Christian H. Kuhn
2016-09-18 11:08:24 UTC
Permalink
Hallo Gemeinde,

Ich werde gerade mal wieder blond. Untenstehendes Programm ist in
Eclipse geschrieben worden, und in der IDE wird es problemlos kompiliert
und ausgeführt. Nicht so auf der Kommandozeile, weder in Windows-CMD
noch in der Git-Bash.

$ java -cp . VerschiebeDecrypt
Fehler: Hauptklasse VerschiebeDecrypt konnte nicht gefunden oder geladen
werden

Google kennt den Fehler, die Lösungen treffen hier aber nicht zu. java
-version und javac -version zeigen, dass java und javac in der richtigen
Version gefunden werden. CLASSPATH wird im Aufruf gesetzt.
Sourcecode-File, Klasse und Klassenfile haben den gleichen Namen (keine
Tippfehler, gleiche CamelCaps etc.). Deinstallieren/Neuinstallieren von
Java half nichts. Es gibt auch keine wilden, unübersichtlichen
Abhängigkeiten. Andere Fehler konnte ich mit Google nicht finden. Was
kann ich sonst noch tun?

package de.qno.util;

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class VerschiebeDecrypt {

public static void main(String[] args) throws Throwable {
// final String chiffre = "ITTMUMQVMMVBKPMV";
BufferedReader input = new BufferedReader(new
InputStreamReader(System.in));
System.out.println("Enter String:");
String chiffre = input.readLine();
for (int i = 0; i < 26; i++) {
StringBuilder clear = new StringBuilder();
for (char crypt : chiffre.toCharArray()) {
clear.append(Character.toString((char)
(Math.floorMod(crypt - i - 65, 26) + 65)));
}
System.out.printf("Schlüssel: %1$d Klartext: %2$s\n", i,
clear.toString());
}
}
}

TIA
QNo
Florian Weimer
2016-09-18 11:25:14 UTC
Permalink
Post by Christian H. Kuhn
Google kennt den Fehler, die Lösungen treffen hier aber nicht zu. java
-version und javac -version zeigen, dass java und javac in der richtigen
Version gefunden werden. CLASSPATH wird im Aufruf gesetzt.
Sourcecode-File, Klasse und Klassenfile haben den gleichen Namen (keine
Tippfehler, gleiche CamelCaps etc.). Deinstallieren/Neuinstallieren von
Java half nichts. Es gibt auch keine wilden, unübersichtlichen
Abhängigkeiten. Andere Fehler konnte ich mit Google nicht finden. Was
kann ich sonst noch tun?
Deutsche Locale abschalten und hoffen, daß das die Fehlermeldung
verbessert.

»java -verbose« ausprobieren, ggf. helfen die Pfade dort bei der
Diagnose.

»strace -f java -cp . VerschiebeDecrypt |& grep VerschiebeDecrypt«
sollte auch den Pfad anzeigen, der tatsächlich verwendet wird.
Christian H. Kuhn
2016-09-18 12:57:40 UTC
Permalink
Post by Florian Weimer
Deutsche Locale abschalten und hoffen, daß das die Fehlermeldung
verbessert.
Keine Änderung.
Post by Florian Weimer
»java -verbose« ausprobieren, ggf. helfen die Pfade dort bei der
Diagnose.
Ich staune, was da alles an Überflüssigem geladen wird. Nicht aber die
Hauptklasse.
Post by Florian Weimer
»strace -f java -cp . VerschiebeDecrypt |& grep VerschiebeDecrypt«
sollte auch den Pfad anzeigen, der tatsächlich verwendet wird.
$ strace -f java -cp . VerschiebeDecrypt |& grep Verschiebe
Fehler: Hauptklasse VerschiebeDecrypt konnte nicht gefunden oder geladen
werden
create_child: java -cp . VerschiebeDecrypt

lg
QNo
Florian Weimer
2016-09-18 13:00:20 UTC
Permalink
Post by Christian H. Kuhn
Post by Florian Weimer
»strace -f java -cp . VerschiebeDecrypt |& grep VerschiebeDecrypt«
sollte auch den Pfad anzeigen, der tatsächlich verwendet wird.
$ strace -f java -cp . VerschiebeDecrypt |& grep Verschiebe
Fehler: Hauptklasse VerschiebeDecrypt konnte nicht gefunden oder geladen
werden
create_child: java -cp . VerschiebeDecrypt
Oh, das ist nicht das strace, welches ich kenne. Möglicherweise gibt
das gar nicht die Dateinamen aus.
Patrick Roemer
2016-09-18 11:28:05 UTC
Permalink
Post by Christian H. Kuhn
$ java -cp . VerschiebeDecrypt
Fehler: Hauptklasse VerschiebeDecrypt konnte nicht gefunden oder geladen
werden
[...]
Post by Christian H. Kuhn
package de.qno.util;
java de.qno.util.VerschiebeDecrypt

Viele Grüße,
Patrick
Christian H. Kuhn
2016-09-18 12:48:26 UTC
Permalink
Post by Patrick Roemer
Post by Christian H. Kuhn
$ java -cp . VerschiebeDecrypt
Fehler: Hauptklasse VerschiebeDecrypt konnte nicht gefunden oder geladen
werden
java de.qno.util.VerschiebeDecrypt
Gleicher Fehler.

lg
QNo
Florian Weimer
2016-09-18 12:56:52 UTC
Permalink
Post by Christian H. Kuhn
Post by Patrick Roemer
Post by Christian H. Kuhn
$ java -cp . VerschiebeDecrypt
Fehler: Hauptklasse VerschiebeDecrypt konnte nicht gefunden oder geladen
werden
java de.qno.util.VerschiebeDecrypt
Gleicher Fehler.
Ah. Bist Du im Verzeichnis, das »de« als Unterverzeichnis hat?
Patrick Roemer
2016-09-18 13:38:39 UTC
Permalink
Post by Christian H. Kuhn
Post by Patrick Roemer
Post by Christian H. Kuhn
$ java -cp . VerschiebeDecrypt
Fehler: Hauptklasse VerschiebeDecrypt konnte nicht gefunden oder geladen
werden
java de.qno.util.VerschiebeDecrypt
Gleicher Fehler.
Dann machst Du noch was anderes falsch. :)

<snip>
$> tree
.
└── de
└── qno
└── util
└── VerschiebeDecrypt.java

3 directories, 1 file
$> javac de/qno/util/VerschiebeDecrypt.java
$> tree
.
└── de
└── qno
└── util
├── VerschiebeDecrypt.class
└── VerschiebeDecrypt.java

3 directories, 2 files
$> java de.qno.util.VerschiebeDecrypt
Enter String:
</snip>

Bzw. etwas organisierter:

<snip>
$> tree
.
├── bin
└── src
└── de
└── qno
└── util
└── VerschiebeDecrypt.java

5 directories, 1 file
$> javac -sourcepath src -d bin src/de/qno/util/VerschiebeDecrypt.java
$> tree
.
├── bin
│ └── de
│ └── qno
│ └── util
│ └── VerschiebeDecrypt.class
└── src
└── de
└── qno
└── util
└── VerschiebeDecrypt.java

8 directories, 2 files
$> java -classpath bin de.qno.util.VerschiebeDecrypt
Enter String:
</snip>

Viele Grüße,
Patrick
Stefan Ram
2016-09-18 15:12:08 UTC
Permalink
Post by Patrick Roemer
$> tree
Patrick hat das wichtigste schon gut beantwortet,
und die Verwendung von »tree« is ebenfalls eine
gute Idee. Allerdings wäre für ein Posting, das
auch von Leuten ohne UTF-8 gelesen werden könnte,
»tree /a« auch eine Möglichkeit gewesen.

Wenn eine Quelldatei »M.java« mit

package p;

beginnt, dann sollte sie - aus Sicht der tools -
im /Unterverzeichnis/ p liegen. Für »javac« ist
das nicht unbedingt nötig, aber für »java«.

Also /nicht/

PATH=%PATH%;%JDKBIN%
echo >M.java package p; class M{public static void main(String[]a){}}
javac M.java
java M

, sondern

PATH=%PATH%;%JDKBIN%
mkdir p
echo >p/M.java package p; class M{public static void main(String[]a){}}
javac p/M.java
java p/M

.
Stefan Ram
2016-09-18 15:29:54 UTC
Permalink
Post by Stefan Ram
java p/M
Ich habe das getestet, und es geht so,
aber »java p.M« wäre wohl etwas klassischer.

Michael Paap
2016-09-18 14:52:33 UTC
Permalink
Post by Christian H. Kuhn
Post by Patrick Roemer
java de.qno.util.VerschiebeDecrypt
Gleicher Fehler.
Wer mit Paketen hantiert, sollte nicht in einem davon sitzen. ;-)

Begib dich per cd in den Ordner, in welchem der Ordner de liegt und
führe von dort aus aus:

java de.qno.util.VerschiebeDecrypt

Wenn du da Zeug mit Eclipse erstellt hast, ist der ordner, von dem ich
rede, der bin-Ordner deines Projekts.

Gruß,
Michael Paap
Lesen Sie weiter auf narkive:
Loading...