Klassen .jar - eine .class datei ändern?

saya121

Mitglied
Hey Leute..
Nachdem ich mich stundenlang in den Weiten des Internets "schlau" gelesen haben und es mich kein Stück weitergebracht hat, würde ich euch gerne mein Problem ans Herz legen.

Ich und meine Projektgruppe müssen für ein Schulprojekt den Lego-Mindstorm 2.0 mit dem Programm "Tilted Twister 2.0" (eine fertige Datei) aufsetzen. Dieses Programm in Verbindung mit dem Lego Mindstorm hat die Aufgabe, einen Rubix-Cube zu lösen. Da dies jedoch zu einfach wäre, wurde unsere Aufgabe auf das manuelle Einstellen des "End-Würfels" erweitert.

Lego-Mindstorm: (Tilted Twister Java Application -> tiltedtwister.jar) Tilted Twister

Nun haben wir die .jar Datei entpackt und uns in den Code so weit es geht eingearbeitet. Nun haben wir in der .class datei: " \org\kociemba\twophase\FaceCube.class" eine mögliche Lösung gefunden. Da man .class dateien nicht ändern kann, haben wir es dekompiliert und als .java in den Ordner "\org\kociemba\twophase\" gespeichert, damit es beim Kompilieren in eine .class datei geändert wird (stand so bei google?).

Das Projekt wurde mithilfe con "Eclipse" nachgebaut.
Beim Kompilieren kann man auswählen "Java Applet" oder "Java Application". Beides gibt eine Fehlermeldung aus, die Ihnen vermutlich von älteren Posts bekannt sein sollte.
Da wir recht wenig Ahnung in dem Bereich von Java haben, gehen wir davon aus, dass es noch einen weiteren Fehler geben muss.

Ich hoffe Sie haben unsere/meine Problematik verstanden und können uns in diesem Bereich zur Verfügung stehen.

Mit freundlichen Grüßen
Simon

PS: Bitte in das richtige Unterforum verschieben, falls das hier falsch ist. ;)
 
B

bygones

Gast
mhm es waere schon gut zu wissen, was das problem ist.

vermutlich fehlen abhaengigkeiten ? vielleicht habt ihr nicht richtig in Eclipse die sourcen eingebunden etc. gibt einige Moeglichkeiten.

Es kann auch sein dass die lib keine Main methode hat und somit ist es nicht startbar....

da Eclipse automatisch kompiliert, man muss nur beim ausfuehren angeben, ob Applet oder Application
 

saya121

Mitglied
Das Problem ist kritisch gesehen nur die Bearbeitung einer .class datei.
Da die ehemalige .jar datei vollkommen funktionsfähig war, müsste demnach doch eine main-Funktion vorhanden sein?

Ich denke, ich werde jede einzelne .class-Datei aus dem Ordner dekompilieren müssen und die java dateien dann nach dem gleichen Ordnerschema im Compiler zusammenführen und dann Komplilieren?
 

Blakh

Bekanntes Mitglied
Tilted Twister Java Application

If you are able to connect your LEGO Mindstorms brick to a computer via Bluetooth, you can use the Java Application tiltedtwister.jar to let your computer calculate a faster solution.

Source Code

You don't need the source code unless you want to modify it.
The program is written in NXC using Bricx Command Center. It cannot be edited or viewed in the LEGO Mindstorms software. (It can be viewed in notepad)
And here is the java application source code.

Wieso nehmt ihr die jar um dann krampfhaft etwas in class-Dateien zu ändern, wenn es die Source-Dateien auf der Website gibt? Versteh ich da was falsch?
 

saya121

Mitglied
Die Datei ist nur eine einzige .java datei.. Ich gehe davon aus, dass das nicht der ganze Code sein kann, da in der .jar datei wesentlich mehr Ordner und .class dateien sind.
Die .java die man auf der Homepage laden kann, ist nur die Main-funktion.

Zudem stehen am Anfang viele Import-Objekte.
 

Michael...

Top Contributor
Da man .class dateien nicht ändern kann, haben wir es dekompiliert und als .java in den Ordner "\org\kociemba\twophase\" gespeichert, damit es beim Kompilieren in eine .class datei geändert wird (stand so bei google?).
Es reicht nicht aus die Java Datei in die Ordnerstruktur zu stecken. In der Klasse muss diese Struktur als Package deklariert werden:
Java:
package org. kociemba.twophase;

...

public class FaceCube {
...
Dann die Klasse unter Einbindung des jars kompilieren und anschließend (inkl. Ordner) in die jar stecken, so dass die im jar existierende org. kociemba.twophase.FaceCube.class ersetzt wird.
Anschließend das jar wieder per Doppelclick starten.
 

saya121

Mitglied
Mir stellt sich zudem das Problem, dass ein Teil der momentanen .class datei variabel sein muss. Ich denke, das werden wir durch ein Textdokument-Import machen, aber das ist ein anderes Problem.

Wie siehts aus, wenn ich jede .class datei decompliere und anschließend die Ordner Struktur nachbaue und neu Kompiliere?
 

saya121

Mitglied
Ich weiß nur nicht, welche .class dateien ich decompilieren muss..
"org. kociemba.twophase;" nur die aus diesem Verzeichnis oder allgemein besondere?

Denn wenn ich nur die Dateien aus dem oben genannten Verzeichnis dekompliere, kommt wieder die fehlermeldung, dass kein main vorhanden ist.. oder hab ich da jetzt wieder was falsch verstanden?
 

Michael...

Top Contributor
Ich weiß nur nicht, welche .class dateien ich decompilieren muss..
"org. kociemba.twophase;" nur die aus diesem Verzeichnis oder allgemein besondere?
Eigentlich nur die Klasse die geändert werden soll. Die jar muss natürlich zum Kompilieren in das Projekt eingebunden werden. (Eclipse: Build Path)
Denn wenn ich nur die Dateien aus dem oben genannten Verzeichnis dekompliere, kommt wieder die fehlermeldung, dass kein main vorhanden ist.. oder hab ich da jetzt wieder was falsch verstanden?
Nicht jede Klasse besitzt eine main, die Klasse FaceCube ist (vermutlich) nicht ausführbar. Das muss sie auch nicht sein und macht auch keinen Sinn.
In dem jar gibt es vermutlich nur eine einzige Klasse die eine main besitzt (TiltedTwister). Daher wie oben und in dem anderen Post beschrieben:
- zuänderende Klasse dekompilieren
- jar ins Projekt einbinden
- Klasse überschreiben (auf Package achten)
- Klasse kompilieren (in Eclipse einfach durch speichern)
- class Datei (unter Berücksichtigung des Packages) ins jar packen
- das jar ausführen

Soll das ganze aus Eclipse heraus gestartet werden, kann man noch die TiltedTwister dekompilieren und als neue Klasse im Projekt anlegen. Diese kann man dann als Applikation ausführen (es gelten oben genannte Voraussetzungen)
 

saya121

Mitglied
Oh wow.. Die Antwort war jetzt perfekt! danke danke danke!

Ich hab jetzt den Ordner entsprechend eingebunden und kompliliert und zu einer .jar gemacht.
Aber die .jar lässt sich nicht ausführen. also wenn ich doppelklick mache, öffnet sich keine anwendung :/
 

madlion

Mitglied
Schön wenn es das Richtige war und dir schon mal weitergeholfen hat. ^^

Hast du in der Manifest Datei die Main Klasse angegeben?
Sonst klappt das mit dem starten der Jar-Datei nicht.
 

saya121

Mitglied
Ich arbeite mit netbeans:

Ich hab jetzt bei meiner "JavaApplication1" rechtsklick gemacht, und bei "Properties" auf "Run" und dann versucht bei Main-Class "TiltedTwister.java" einzugeben. Beim builden kam dann ein Fehler, dass er die Main-Funktion nicht findet.
_________

Eine MANIFEST.MF Datei ist in dem Ordner META-INF, wobei der inhalt nur : "Manifest-Version: 1.0" ist.

In dem Unterordner "nbproject" hab ich in "project.properties": "manifest.file= \META-INF\manifest.mf" hinzugefügt..

Was hab ich jetzt falsch gemacht?
 
Zuletzt bearbeitet:

madlion

Mitglied
Ich arbeite mit netbeans:
Gut, denn dann kümmert sich NetBeans darum. Was aber voraussetzt daß die richtige Klasse als Main-Klasse gesetzt ist.

Ich hab jetzt bei meiner "JavaApplication1" rechtsklick gemacht, und bei "Properties" auf "Run" und dann versucht bei Main-Class "TiltedTwister.java" einzugeben. Beim builden kam dann ein Fehler, dass er die Main-Funktion nicht findet.
Ähm... hast du dort wirklich "TiltedTwister.java" angegeben? Also mit .java? Du mußt dort die Klasse angeben, nicht die Java-Datei, d.h. also ohne das .java.

In dem Unterordner "nbproject" hab ich in "project.properties": "manifest.file= \META-INF\manifest.mf" hinzugefügt..
Warum du das gemacht hast erschliesst sich mir gerade nicht unbedingt.
 

saya121

Mitglied
Link

hab das von da. Also so hab ich das da rausgelesen.

Ich habe jetzt das .java weggelassen..
Beim builden steht dann trotzdem :
"TiltedTwister class wasn't found in JavaApplication1 project.
Select the Main class:

javaapplication1.JavaApplication1"

Dabei ist in TiltedTwister folgende Zeile:
Java:
public static void main(String[] args)
was doch bedeutet, dass eine Main-funktion vorhanden ist.
 

madlion

Mitglied
Hast du die Klasse TiltedTwister nicht als Source in deinem Projekt drin? Sondern nur als Jar eingebunden?
Ich bin mir nicht ganz sicher aber ich glaube Netbeans findet keine Main Klassen aus anderen Jar-Dateien.
Wenn du TiltedTwister starten willst muß die im Projekt liegen. Ich denke dann sollte es klappen.
 

saya121

Mitglied
Ich hab die gesamte .jar entpackt und nur den org-kociemba-Twophase ordner mit dem anderen ordner wo die .java sind (dein downloadlink) getauscht.
Also keine Source oder sonstiges angegeben.
 

madlion

Mitglied
Ich habe dich leider nicht so recht verstanden...
Du hast ja in deinem Netbeans Java Projekt (JavaApplication1!?) einen Ordner src. Dort hast du anscheint ein Package javaapplication1 mit der Klasse JavaApplication1.
Hast du jetzt im src-Ordner auch die Klasse TiltedTwister liegen?
 

saya121

Mitglied
Ich habe jetzt den Main class Pfad angepasst (der Projektordner) und dann dementsprechend versucht die "TiltedTwister" anzugeben. Nun finde ich jedoch nicht die TiltedTwister zum auswählen, sondern erst, wenn ich TiltedTwister.java (von der Homepage geladen) reinziehe, kann ich das auswählen.

Bei "Build and Clear" werden mir mehrere Import-fehler angezeigt, und links neben dem Dateinamen von der .java und von dem Projekt steht ein Ausrufezeichen in einem roten Kreis.

Die Importfehler sind beispielsweise

Java:
import lejos.pc.comm.NXTComm;
Bei dem Ausrufezeichen davor steht : "package lejos.pc.comm does not exist".
In dem Ordner sind aber die entsprechenden .class dateien vorhanden.
 

saya121

Mitglied
Ich hab das Verzeichnis von "src" zu dem Projektordner geändert, da ich sonst meiner Logik nach, alle Importe anpassen müsste.
Wenn das src Verzeichnis standardmäßig : "JavaApplication1\src" war, hab ich es zu "JavaApplication1" geändert. Dies ist der Projektordner.
Und wenn ich das dort builden möchte, zeigt Netbeans mir die oben genannten Fehlermeldungen an.
 

Aldimann

Bekanntes Mitglied
Oh weia!

Nochmal ganz von vorne und ich erkläre dir nur wie du die Sourcen bei dir zum laufen bekommst so das du was ändern kannst ;).

Also du nimmst besagte Jar von der Homepage http://kociemba.org/twophase.jar und entpackst sie und öffnest den dadurch enstandenen Ordner. Dann mach eine kopie von dem Ordner "org" (zur Sicherheit) und lösche im untersten Verzeichnis unter "org" alle *.class Dateien. Dann geh in dein Netbeans lege ein entsprechendes Projekt an und kopiere den "org"-Ordner in den "src" Ordner von deinem Projekt.

Ich habe gleiche Schritte mit Eclipse durchgeführt und der Code ist danach Compilierbar... Vielleicht nicht die beste Lösung aber es hat geklappt mit relativ wenig Aufwand ;)

Bzgl. deiner Package-Logik etc. bitte selber nochmal nachlesen bspw. Galileo Computing :: Java ist auch eine Insel - index
 

saya121

Mitglied
Wäre einer so nett, mir eine fertige Projektdatei zukommen zu lassen?
So, dass man nur builden muss und dass ich dann eine entsprechende .jar datei erhalte?

Ich blicke bei java nicht durch und die zeit reicht nicht aus, um mich in das Thema einzuarbeiten..

Ich bitte euch.. !
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H aus .class datei eine .java erzeugen Allgemeine Java-Themen 4
antonbracke Aus Jar eine Class laden und damit arbeiten! Allgemeine Java-Themen 5
S mit Class eine Klasse nur einmal instantiieren Allgemeine Java-Themen 4
KonradN Mal eine Frage zu Binary Serialization Allgemeine Java-Themen 15
D Hat Java eine Library um JavaScript auszuwerten? Allgemeine Java-Themen 2
dokan wie kann ich eine funktionierende Suchleiste erstellen Allgemeine Java-Themen 1
B Wie erstelle ich dazu eine Abfrage ob der Button gedrückt wurde? Allgemeine Java-Themen 8
J Integration pay Pale in eine JavaFx Desktop Application Allgemeine Java-Themen 1
berserkerdq2 Wenn ich einfach eine GIF in den Scenebuilder als Bild reinpacke, wird das dann asl Gif angezeigt Allgemeine Java-Themen 1
8u3631984 Strukturiertes Logging : Jedes Feld in eine seperate Zeile - aber wie ? Allgemeine Java-Themen 2
berserkerdq2 Gibt es eine saubere Dokumentation von Jfoenix? Allgemeine Java-Themen 1
M Eigene Datenstruktur um eine Menge zu speichern Allgemeine Java-Themen 3
A Wie schreibe ich eine For-Schleife in ein Stream API um? Allgemeine Java-Themen 12
E Es ist nicht möglich, eine Batch-Anweisung auszuführen. Allgemeine Java-Themen 9
T Eine Frage des Designs Allgemeine Java-Themen 2
R Best Practice Erfahrungswerte für eine Migration von JSF nach Angular (oder anderes JS-Framework) Allgemeine Java-Themen 1
H Eine Linie verkürzen Allgemeine Java-Themen 5
N rekursion mehrfach eine Methode Öffnen Allgemeine Java-Themen 4
berserkerdq2 Wenn ich eine Methode nur jede 50ms ausführen will, wie mach ich das? Allgemeine Java-Themen 4
berserkerdq2 Wie synchronisiere ich eine for-Schleife Allgemeine Java-Themen 12
berserkerdq2 Wie mache ich in IJVM eine if verzweigung? Allgemeine Java-Themen 27
F Gibt es mittlerweile eine Alternative zu DaisyDiff Allgemeine Java-Themen 2
_user_q Was brauche ich, um eine eigene "Search for updates"-Funktion einzubauen? Allgemeine Java-Themen 1
E Eine Methode einer extendeten Klasse deakitivieren Allgemeine Java-Themen 12
LimDul Kam eine java.net.URL zu einer HashMap und ging als DNS Anfrage wieder heraus Allgemeine Java-Themen 18
pizza_dox_9999 Wie füge ich eine "eigene" ScriptEngine dem ScriptEngineManager? Allgemeine Java-Themen 3
F Kennt ihr eine Library um 2 HTML Seiten zu diffen? Allgemeine Java-Themen 8
Y ImagePanel von anderer Klasse in eine MainFrame Klasse hinzufügen. Allgemeine Java-Themen 1
OnDemand Anzeigen was eine Applikation macht Allgemeine Java-Themen 1
T Problem beim Umwandeln in eine Jar-Datei Allgemeine Java-Themen 3
J Eine Frage zu den Threads und Task Allgemeine Java-Themen 1
Tobero Wie bekomme ich in welchem Quadrat sich eine Position in einem Grid befindet Allgemeine Java-Themen 11
Tobero Wie kann man eine Poisson Disc Sampler? Allgemeine Java-Themen 7
M Openjdk - gibt es auch eine Openjre? Allgemeine Java-Themen 7
R Lambda Expression in einer Methode execute() aufrufen (execute() ist eine Methode aus dem funktionalen Interface Command) Allgemeine Java-Themen 5
S Noch eine Design-Frage zu Setter Allgemeine Java-Themen 6
N Arrayliste in eine Datei speichern Allgemeine Java-Themen 4
J Öffnen eine jar-Datei Allgemeine Java-Themen 11
Zrebna Gibt es eine Möglichkeit eine NPE zu vermeiden, wenn null returned wird? Allgemeine Java-Themen 3
S Klassen Einfügen von unbekannter menge an Variablen in eine Klasse mithilfe von ASM Allgemeine Java-Themen 5
R Wo müsste ich im Code eine Änderung vornehmen? Allgemeine Java-Themen 6
S Rückgabe einer HttpURLConnection für eine Seite einlesen bei der man eingeloggt ist..? Allgemeine Java-Themen 5
S Gibt es eine Moeglichkeit die Runtime Ausführung zu analysieren..? Allgemeine Java-Themen 7
S Habt ihr eine Idee wie man Serializierung testen kann..? Allgemeine Java-Themen 6
S Wenn eine Klasse zwei Interfaces mit derselben Methodensignatur implementiert: welche wird aufgerufen? Allgemeine Java-Themen 15
Drachenbauer warum bekomme ich hier eine NullPointerException Allgemeine Java-Themen 6
M Gibt es eine API die den aktuellen Wert eines Indikators beim Trading zurückgibt? Allgemeine Java-Themen 7
X Collections Gibt es eine Klasse welche die Vorteile von List und HashMap vereint, aber konstante Laufzeit (O(1)) hat in Java? Allgemeine Java-Themen 4
N Eine stelle der Fibonacci-Zahlenfolge ausgeben. Allgemeine Java-Themen 4
E Hat der Compiler einen Fehler oder warumbeendet return nicht eine Methode ? Allgemeine Java-Themen 7
W Collections Suche etwas Sorted-List-Artiges...hat jemand eine Idee? Allgemeine Java-Themen 13
L Methoden Über Reflections eine Methode mit aufrufen Allgemeine Java-Themen 3
S Kann ich eine Methode schreiben die alle Arten von funktionalen Interfaces akzeptiert..? Allgemeine Java-Themen 21
Drachenbauer Wie kann eine vorgegebene Farbe über einen String erkannt werden? Allgemeine Java-Themen 11
J Datenstruktur für eine Map erstellen Allgemeine Java-Themen 2
sascha-sphw Java 9 module Zugriff auf eine resource einer anderen JAR Allgemeine Java-Themen 0
pkm Kann eine ServerSocket-Klasse nicht stateful sein? Allgemeine Java-Themen 4
B Aufruf der Methode ergibt eine Exception Allgemeine Java-Themen 13
I Eine Anwendung so gut wie möglich beschützen Allgemeine Java-Themen 9
M Wie kann man eine void Methode mit Variablen von zwei verschiedenen Objekten ausführen? Allgemeine Java-Themen 15
X Wie mache ich hier eine Rekursion rein ? Allgemeine Java-Themen 7
K OOP Suche Hilfe + Erklärung für eine Hausaufgabe Allgemeine Java-Themen 1
N Über einen Button in JavaFX ein Event über eine Pipeline schicken(Netty) Allgemeine Java-Themen 1
M Login in eine Webseite mit Java Allgemeine Java-Themen 3
A NetBeans Suche Programmierer für eine Belegarbeit Allgemeine Java-Themen 11
D Warum kann ich eine (deflaut) Klasse aus einer Libary in einem anderen Projekt benutzen? Allgemeine Java-Themen 3
L Übergabe an eine eher einfache Java- Applikation wegen Kündigung Allgemeine Java-Themen 1
C Ein Iterator ist eine Implementierung des Interface Iterable? Allgemeine Java-Themen 2
M Schlüsselworte Was ist eine Java Spezifikation + JSR? Allgemeine Java-Themen 11
E RMI NULL-Pointer-Exeception wenn der RMI-Proxy eine Methode deligiert Allgemeine Java-Themen 2
E RMI FWH: RMI- Wie erstelle ich stubs dynamisch, bzw. unterdrücke eine Statisch-Warnung? Allgemeine Java-Themen 0
J Eine bestimmte Zahl im Integer ändern Allgemeine Java-Themen 9
Q-bert Strings aus der JList in eine Datenbank speichern Allgemeine Java-Themen 1
D Möglichkeit mit GAE eine Table auszulesen und eine csv zu schreiben Allgemeine Java-Themen 22
S Korrekte Pfadangaben damit eine .jar Datei unter Windwos läuft. Allgemeine Java-Themen 24
D Eine Forschleife mit Threads abarbeiten um es zu schneller zu machen. Ist das möglich? Allgemeine Java-Themen 20
S Wie kann ich eine kleine Stelle in meinem Code mit multiplen Threads abarbeiten..? Allgemeine Java-Themen 20
B Gibt es eine Funktion die den Datentyp einer Variablen ermittelt? Allgemeine Java-Themen 8
R bei eclipse von java in eine andere programmiersprache wechseln? Allgemeine Java-Themen 2
D Pivot-Wahl beim QuickSort steigert die Effizienz, eine Lüge??? Allgemeine Java-Themen 17
C Eclipse einstellen, dass eine bestimmte JDK benutzt werden soll Allgemeine Java-Themen 3
M Klassen Eine Klasse in mehreren Klassen einbinden Allgemeine Java-Themen 11
A Best Practice Java - eine Art Plugin-Struktur Allgemeine Java-Themen 3
S wie rufe ich mit .jar datei eine .bat auf? Allgemeine Java-Themen 15
R Signatur von Methoden in eine Datei schreiben? Allgemeine Java-Themen 4
perlenfischer1984 Functionsparameter prüfen und eine Exception werfen !? Allgemeine Java-Themen 11
J Mehrere Wörter getrennt in eine Array einlesen, wie ? Allgemeine Java-Themen 7
E Methoden Hat jemand eine gute Lösung? Allgemeine Java-Themen 5
Z NullPointerException beim Schreiben einer ArrayList in eine Datei Allgemeine Java-Themen 6
Exdroid BlueJ Wie bekomme ich die Ausgabe in eine TXT Datei? Allgemeine Java-Themen 2
G Methoden Aus einem Event, wo ich weiß, dass es ausgeführt werden wird, eine Get-Methode basteln Allgemeine Java-Themen 8
F Wie kann ich auf einem System prüfen, ob eine lib verfügbar ist? Allgemeine Java-Themen 2
Tausendsassa Interface Eine Gui von einer anderen schließen lassen Allgemeine Java-Themen 3
S Threads Kann mir jemand helfen eine parallele Hilfsklasse zu implementieren..? Allgemeine Java-Themen 3
S Best Practice Brauche eine Idee für eine Java Projekt! Allgemeine Java-Themen 11
P Zwei ArrayLists: Ohne die eine überhaupt anzurühren, wird sie verändert Allgemeine Java-Themen 2
M Eine Datei im Speicher erneut laden(?) Allgemeine Java-Themen 1
V Gibt es eine Möglichkeit die Internet auslastung mit Java auszulesen Allgemeine Java-Themen 11
L Drop Emails von Outlook in eine JList Allgemeine Java-Themen 5
P Wie funktioniert das Feedback eines Klicks auf eine Java GUI Allgemeine Java-Themen 10

Ähnliche Java Themen

Neue Themen


Oben