Frage von TheMatrixLP, 133

Fehler: Hauptklasse konnte nicht gefunden oder geladen werden?

Hallo,

Ich habe mir ein Java Programm für persönliche Zwecke heruntergeladen und decompiled. Als ich nun dieses Programm in Eclipse ausführen wollte, bekam ich diese Fehlermeldung:

Fehler: Hauptklasse konnte nicht gefunden oder geladen werden.

Ich habe jedoch die Main-Class richtig eingegeben und trotzdem kommt der Fehler. Ich bin noch nicht so erfahren in Java und deswegen lad ich die decompilte datei mal hoch. LINK: http://www.filedropper.com/source_2 Bitte schlagt mir keine Bücher für Jave vor und sagt nicht das ich googeln soll.

Danke im Vorraus <3

Expertenantwort
von KnusperPudding, Community-Experte für Java, 108

Also ich lade sicher nicht eine unbekannte ZIP Datei aus einer unbekannten Quelle herunter.

Wie hast du die Datei "decompiled" ? Woher stammt diese Datei? Wo hast du eine Hauptklasse definiert? 

Ich habe jedoch die Main-Class richtig eingegeben 

Sicher? Wie und wo hast du das gemacht?

 sagt nicht das ich googeln soll

Welche Eigeninitiative hast du dann bisher verwendet? Wir kennen deine Arbeitsschritte nicht, deshalb wäre das das mindeste, was wir von dir verlangen können ohne deine Arbeit doppelt zu machen.

Kommentar von TheMatrixLP ,

Hallo KnusperPudding,

In der Zip Datei ist der src. Falls du denkst, die Zip könnte eine Schadware enthalten, kann ich sie auf Google hochladen, weil man dadurch die zip online entpacken kann ;) Deswegen kannst du dann auch sichergehen, dass da kein Virus oder änliches verpackt ist. 

Ich habe die java Datei mit CFR decompilet und die Hauptklasse war der Main Klasse natürlich zugewiesen. Woher ich weiß, dass ich den Klassenpfad richtig eingegeben habe? Die fertige Jar Datei enthällt eine Meta-Inf Datei, die den Pfad zur Hauptklasse zeigt. 

Ich habe mehrere Male mit Eclipse versucht die Hauptklasse mit "Run with Java Application" auszuführen. Auch have ich den Pfad bei der Konfiguration eingegeben und mehrmals vor der Ausführung den Pfad nachgeprüft.

Die hochgeladene Zip Datei habe ich direkt in Eclipse importiert und hab auch alles hoffentlich richtig eingestellt. 

Wenn es dir was nützt kann ich auch das Eclipse Projekt auf Google hochladen.

Was du mit "Eigeninitiative" meinst verstehe ich nicht so ganz. Ich hab auf der ersten Seite bei der Suche auf Google nach "Fehler: Hauptklasse konnte nicht gefunden oder geladen werden" alle Links bis zum geht nicht mehr gestöbert und auch ein paar YouTube Videos geschaut. Sie haben mir aber nicht wirklick weitergeholfen, da ich alle Schritte, die mir dort vorgeschlagen wurden schon gemacht habe. 

Ich habe da aber so eine Vermutung, dass beibder Dekompilierung etwas schiefgegangen ist und die Hauptklasse deswegen nicht geladen werden konnte.

Die Klassen brauchten auch Admin Rechte, um auf ein paar Klassen zuzugreifen. Auch die Main Methode brauchte Admin Rechte, die ich aber nicht geschafft habe zu erteilen :/ Die Datei macht KEIN Schaden, da sie lediglich die Adminrechte braucht, um die hosts Datei in Windows zu ändern

Hier die ZIP auf Google: 

https://drive.google.com/file/d/0B1ucsM9EZLVXbVJfNklxeVlrYzA/view

Kommentar von KnusperPudding ,

Hallo Matrix,

somit habe ich mir das angesehen und hierbei folgende Punkte:

  1. Erstelle in deiner IDE ein neues Projekt. 
  2. Kopiere die 3 Haupt-Ordner: com, net, org in in deinen SRC Ordner
  3. Jetzt wirst du feststellen, was das Problem ist, denn 100% hat der Decompiler wohl nicht funktioniert.
  4. Sämtliche Textstellen sind rot unterlegt weil die Methodenaufrufe falsch sind:return .separateCamelCase(f.getName(), "-").toLowerCase(Locale.ENGLISH);-->return separateCamelCase(f.getName(), "-").toLowerCase(Locale.ENGLISH);was bedeutet, dass das hier alles von Hand zu korrigieren ist.
  5. Die einzige Main-Methode die ich sehe, befindet sich hier: net.mcleaks.authenticator.Authenticator
  6. Die Main Methode scheitert beim starten, da sämtliche Ressourcen fehlen:FXML-Datei, in welcher das Layout des Authenticators gespeichert istSämtliche. PNG Dateien wie success.png, icon.png, etc

Die paar falschen Codestellen lassen sich von einem bisschen Erfahrenem Auge auch von Hand lösen. Aber die FXML wäre so das mindeste was du von den Ressourcen bräuchtest, und das wäre dein Knackpunkt ob du diese auftreiben kannst, denn ohne die wird es wohl nicht gehen.

Wenn das alles in ein eigenes Projekt übertragen hast, kannst du bei diesem natürlich die Authenticator-Klasse als Main-Klasse festlegen.

Kommentar von TheMatrixLP ,

Danke für die hilfreiche Antwort, 

Wie du bereits erwähnt hast, dass der Decompiler nicht 100% funktioniert hat fiel mir schon am Anfang auf. 

Ich habe jedoch vergessen zu erwähnen, dass ich nur die Hauptklasse wieder compilen will. 

Du hast auch gesagt das ein paar Resourcen fehlen, die ich jetzt in dem Ordner, in dem auch die Ordner com, net und org sind gespeichert habe.

 Manche Textstellen sind auch Rot unterstrichen, weil sie Zugriff auf JavaFX benötigen, und diesen nicht haben. Ich habe versucht Eclipse als Administrator auszuführen, jedoch konnte trotzdem nicht auf JavaFX zugegriffen werden. 

Ich finde die falschen Methodenaufrufe jedoch nicht und weiß somit nicht, wie ich es beheben soll.

Es wäre echt hilfreich, wenn du mir sagen könntest, wo das Problem auftaucht und wie es zu lösen ist bzw kannst du mir auch ein guten Decompiler vorschlagen wenn das hilft.

Kommentar von KnusperPudding ,

 Manche Textstellen sind auch Rot unterstrichen, weil sie Zugriff auf JavaFX benötigen

Ja, richtig. Der Bereich: FXML lässt eindeutig auf JavaFX schließen.

Eclipse als Administrator Starten dürfte nicht die Lösung sein. Viel mehr die Projekt-Eigenschaften prüfen, ob das Projekt mit Java 8 kompiliert wird.

Ich habe jedoch vergessen zu erwähnen, dass ich nur die Hauptklasse wieder compilen will. 

Ja, aber wenn Abhängigkeiten bestehen, kann es sein, dass es Trotzdem nicht 

Ich finde die falschen Methodenaufrufe jedoch nicht und weiß somit nicht, wie ich es beheben soll.

Wenn du dein Dekompiliertes Projekt in ein Eclipse Projekt kopierst, sind sehr viele Klassen rot, die sich aber relativ simpel wieder hinbiegen lassen, Beispiel:

com.google.gson.FieldNamingPolicy:

 @Override
 public String translateName(Field f) {
return .upperCaseFirstLetter(f.getName());
}

Muss korrigiert werden zu:

@Override
public String translateName(Field f) {
return FieldNamingPolicy.upperCaseFirstLetter(f.getName());
}

Diese Fehler siehst du, da sie direkt in rot als Fehler unterstrichen angezeigt werden.

Manchmal hat der Decompiler Generics weggelassen wodurch es zu Type-Fehlern kommt:

com.google.gson.Gson:

Hier wird dir das untermalt.

if ((ongoingCall = threadCalls.get(type)) != null) {

Korrektur:

Map threadCalls = this.calls.get();

zu:

Map<TypeToken<?>, FutureTypeAdapter<?>> threadCalls = this.calls.get();

Aber alle Punkte durchzugehen dauert zu lang, da hier 30+ Klassen von Betroffen sind.

Kommentar von TheMatrixLP ,

Hallo,

Ich werde versuchen das Problem jetzt mit deiner Hilfe zu lösen. 

Danke für deine Hilfe :D Ich melde mich sobald ich wieder Probleme bekomme :D 

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten