Hallo, ich hab ein Problem mit einer NullPointerException.
Sie wird in meiner Klasse ByteWork erzeugt und von meiner Klasse ProcessDataType geworfen.
Bei meinem Tool handelt es sich um die Anfange eines PE-Editors unter Windows.
Ich geb euch mal den ganzen Code, hoffe ihr konnt was sehen:
________________________
/Entry.class
_______________________
/processdata/ProcessDataType.class
_____________________________
/processdata/ByteWork.class
Sie wird in meiner Klasse ByteWork erzeugt und von meiner Klasse ProcessDataType geworfen.
Bei meinem Tool handelt es sich um die Anfange eines PE-Editors unter Windows.
Ich geb euch mal den ganzen Code, hoffe ihr konnt was sehen:
________________________
/Entry.class
Code:
import java.io.*;
import javax.swing.*;
import processdata.*;
public class Entry {
private ProcessDataType pdt;
public static void main(String[] args) throws IOException {
Entry main = new Entry();
main.openFile();
}
public void openFile() throws IOException {
JFileChooser jfc = new JFileChooser();
jfc.setDialogTitle("Wähle eine EXE/DLL-Datei aus...");
jfc.setCurrentDirectory(new File(System.getProperty("java.class.path",".")));
int i = jfc.showOpenDialog(null);
File f = null;
if(i == JFileChooser.APPROVE_OPTION) {
f = jfc.getSelectedFile();
try {
pdt = new ProcessDataType( new RandomAccessFile(f, "r"));
System.out.println("0x"+Long.toHexString(pdt.readSpecifiedDataType(2,true)).toUpperCase());
System.exit(0);
}
catch (Exception e) {
System.out.println("Fehler beim öffnen der Datei: " + e);
}
}
else System.exit(0);
}
}
_______________________
/processdata/ProcessDataType.class
Code:
package processdata;
import java.io.*;
import processdata.ByteWork;
public class ProcessDataType {
private RandomAccessFile raf;
private ByteWork bw;
public ProcessDataType(RandomAccessFile raf) {
this.raf = raf;
}
public long readSpecifiedDataType(int size, boolean reverse) throws IOException {
long data;
if (size == 2)
data = raf.readUnsignedByte();
else if (size == 4)
data = raf.readUnsignedShort();
else if (size == 8)
data = raf.readInt();
else if (size == 16)
data = raf.readLong();
else throw new RuntimeException("- Die angegeben Anzahl an Bytes wird nicht unterstützt !");
if (reverse)
data = bw.reverseData(data,size);
System.out.println(data);
return data;
}
}
_____________________________
/processdata/ByteWork.class
Code:
package processdata;
public class ByteWork {
public long reverseData (long value, int size) {
String str = Long.toHexString(value);
System.out.println(str);
if(str.length()>size)
str = str.substring(str.length()-size, str.length());
while (str.length() != size)
str = "0" + str;
String rts = "";
for (int i = str.length()-1 ;i >= 0; i-=2)
rts += str.charAt(i-1)+ "" +str.charAt(i);
return Long.parseLong(rts,16);
}
}