[Java] Code in eine Klasse eines Applets einfügen
lima-city → Forum → Programmiersprachen → Java
archiv
date
datei
disassembler
entsprechende rechte
erste
geltendes copyright
gen
genehmigung
gewaltiger unterschied
halb neun
instrumentierung
kleinen klasse
kleinen schnipsel
parameter
software
source
ungefhr
vorhandene klasse
wahlweise
-
Hallo zusammen
Ich habe ein Java-Applet (Endung: .jar) nun will ich einen kleinen Schnipsel Code in eine Datei innerhalb des Applets einfügen. Kennt jemand ein geeignetes Programm nennen?
Achja... das JDK hab ich schon probiert:
Ich hab den code in einer *.class datei gespeichert und versucht zu überschreiben...
"jar um0f postlet.jar UploadThread.class" hat leider auch nicht geklappt
Gruß NGK -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Willst du eine Class Datei in ein JAR einfügen oder willst du Bytecode überschreiben? Letzteres geht nicht ohne entsprechende Rechte.
-
Hallo.
Ich will code überschreiben bzw hinzufügen in eine vorhandene Klasse. Wieso geht das nicht ohne weiteres? -
Das geht nunmal nicht ohne weiteres. Um ins JAR des Applets schreiben zu können müsstest du schreibrechte auf dem jeweiligen PC für das Applet anfordern und dann müsstest du noch eine API mitliefern mit dem du den Bytecode manipulieren kannst.
Ich frag mich gerade was du überhaupt damit anstellen willst, denn Bytecode Instrumentierung ist nicht von ungefähr und sollte nur genutzt werden, wenn man genau weiß was man tut.
Beitrag geändert: 9.10.2007 14:41:09 von evil-devil -
Also
Das Applet ist zum Hochladen von Bilden gedacht. Es kann diese auch skalieren aber bisher nur anhand einer per Parameter festgelegten Pixelzahl. Und das stinkt mir. Deswegen habe ich mir den Bytecode mal angeguggt und rausgefunden wo das verändert wird. da würde ich dann folgendes einfügen.
if((origWidth>800) || (origHeight>600)) { if(origWidth>origHeight) { if(origWidth>800) { newWidth= (int) 800; newHeigth=(int) origHeight*newWidth/origWidth; } else { newWidth= (int) origWidth; newHeigth= (int) origHeight; } } else { if(origHeigth>600) { newHeigth= (int) 600; newWidth=(int) origWidth*newHeigth/origHeight; } else { newHeigth= (int) origHeight; newWidth= (int) origWidth; } }
Da ist ja wohl nichts falsches dran oder? :P
Gruß NGK -
Natürlich ist das Falsch. Denn das eine ist Bytecode und das andere ist Javacode der noch nicht in ByteCode übersetzt wurde. Um das zu demonstrieren hier dein Codeschnipsel in einer kleinen Klasse...
public class IfAbfrage { private int origWidth = 0; private int origHeight = 0; private int newHeight = 0; private int newWidth = 0; public void resize() { if((origWidth>800) || (origHeight>600)) { if(origWidth>origHeight) { if(origWidth>800) { newWidth= (int) 800; newHeight=(int) origHeight*newWidth/origWidth; } else { newWidth= (int) origWidth; newHeight= (int) origHeight; } } else { if(origHeight>600) { newHeight= (int) 600; newWidth=(int) origWidth*newHeight/origHeight; } else { newHeight= (int) origHeight; newWidth= (int) origWidth; } } } } }
Und der dazugehörige ByteCode
// Decompiled by DJ v3.9.9.91 Copyright 2005 Atanas Neshkov Date: 09.10.2007 15:34:32 // Home Page : http://members.fortunecity.com/neshkov/dj.html - Check often for new version! // Decompiler options: packimports(3) disassembler // Source File Name: IfAbfrage.java public class IfAbfrage { public IfAbfrage() { // 0 0:aload_0 // 1 1:invokespecial #13 <Method void Object()> // 2 4:aload_0 // 3 5:iconst_0 // 4 6:putfield #15 <Field int origWidth> // 5 9:aload_0 // 6 10:iconst_0 // 7 11:putfield #17 <Field int origHeight> // 8 14:aload_0 // 9 15:iconst_0 // 10 16:putfield #19 <Field int newHeight> // 11 19:aload_0 // 12 20:iconst_0 // 13 21:putfield #21 <Field int newWidth> // 14 24:return } public void resize() { // 0 0:aload_0 // 1 1:getfield #15 <Field int origWidth> // 2 4:sipush 800 // 3 7:icmpgt 20 // 4 10:aload_0 // 5 11:getfield #17 <Field int origHeight> // 6 14:sipush 600 // 7 17:icmple 142 // 8 20:aload_0 // 9 21:getfield #15 <Field int origWidth> // 10 24:aload_0 // 11 25:getfield #17 <Field int origHeight> // 12 28:icmple 88 // 13 31:aload_0 // 14 32:getfield #15 <Field int origWidth> // 15 35:sipush 800 // 16 38:icmple 69 // 17 41:aload_0 // 18 42:sipush 800 // 19 45:putfield #21 <Field int newWidth> // 20 48:aload_0 // 21 49:aload_0 // 22 50:getfield #17 <Field int origHeight> // 23 53:aload_0 // 24 54:getfield #21 <Field int newWidth> // 25 57:imul // 26 58:aload_0 // 27 59:getfield #15 <Field int origWidth> // 28 62:idiv // 29 63:putfield #19 <Field int newHeight> // 30 66:goto 142 // 31 69:aload_0 // 32 70:aload_0 // 33 71:getfield #15 <Field int origWidth> // 34 74:putfield #21 <Field int newWidth> // 35 77:aload_0 // 36 78:aload_0 // 37 79:getfield #17 <Field int origHeight> // 38 82:putfield #19 <Field int newHeight> // 39 85:goto 142 // 40 88:aload_0 // 41 89:getfield #17 <Field int origHeight> // 42 92:sipush 600 // 43 95:icmple 126 // 44 98:aload_0 // 45 99:sipush 600 // 46 102:putfield #19 <Field int newHeight> // 47 105:aload_0 // 48 106:aload_0 // 49 107:getfield #15 <Field int origWidth> // 50 110:aload_0 // 51 111:getfield #19 <Field int newHeight> // 52 114:imul // 53 115:aload_0 // 54 116:getfield #17 <Field int origHeight> // 55 119:idiv // 56 120:putfield #21 <Field int newWidth> // 57 123:goto 142 // 58 126:aload_0 // 59 127:aload_0 // 60 128:getfield #17 <Field int origHeight> // 61 131:putfield #19 <Field int newHeight> // 62 134:aload_0 // 63 135:aload_0 // 64 136:getfield #15 <Field int origWidth> // 65 139:putfield #21 <Field int newWidth> // 66 142:return } private int origWidth; private int origHeight; private int newHeight; private int newWidth; }
Gewaltiger Unterschied, oder? ;) -
Hallo.
jaaa ^^ großes missverständniss. :P die benutzen Variabeln sind natürlich schon von dem Applet definiert .. ich hätte das ja nur so in die Klasse eingefügt. Der Code ansich war ja richtig.
Gruß NGK -
Bringt dir trotzdem nichts, denn solange du den Sourcecode von dem Applet nicht hast kannst du deinen Javacode da nicht einbringen. Es seidenn du weißt wie man eine die If Abfrage in ByteCode schreibt ;)
Und dann würdest du immernoch geltendes Copyright Recht verletzen, da du eine SOftware modifizierst ohne die ausdrückliche GEnehmigung des Autoren.
-
die software gibs als opensouce auf sourceforge und der code zum ändern stand so änlich in der Hilfe.
http://sourceforge.net/project/showfiles.php?group_id=136812
Wüsstest du denn ein Programm mit dem sowas geht? Also erst entpacken, dann decompilen, dann würde ich meinen code reinschreiben und wieder compilen und wieder in das jar Archiv.
Gruß NGK -
Bist du blind? Da steht doch der Link zum Source Download auf der Seite. Source downloaden, anpassen, kompilieren und in JAR packen.
-
Ja mit der ruhe... Die hab ich mir ja schon runtergeladen. Aber erstens sind da ganz andere ordner und mehr dateien drin, als wenn ich so in das jar archiv gugge und 2. hab ich keine ahnung wie ich das compile und zusammenpacke
zusammenpacken mit dem jar tool aussm jdk, aber welche befehle muss ich da nehmen?
Gruß NGK -
Tja, zum kompilieren benötigst du das Java Development Kit (JDK). Das gibt es unter http://java.sun.com/ und nachdem du das installiert hast, den Classpath eingetragen hast und den Sourcecode entpackt hast, kannst du das kompilieren. Wahlweise unter zu Hilfenahme einer IDE wie zb. Eclipse, Netbeans, etc oder direkt von der Konsole. Letzteres ist ohne Vorkenntnisse entsprechend schwieriger.
@VIel mehr Dateien: Naja, vielleicht stellt das JAR nur die Minimumkonfiguration da...hab das ganze nicht geladen und werd dazu heute wohl nicht kommmen. Hab erst um halb neun feierabend. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage