0
안녕에,자바 - NullPointerException이 ClassNode.accept
나는 ClassNode와 ClassWriter을 적용하려고 할 때마다, 그것은 NullPointerException이 발생합니다. 이 문제를 해결할 수있는 방법이 있습니까?
이private byte[] transform(PatchInfo patch, byte[] z){
boolean patched = false;
byte[] bytes = z;
ClassNode node = new ClassNode();
ClassReader reader = new ClassReader(bytes);
reader.accept(node, 0);
WCLog.fine("Patching Class: %s", new Object[] { patch.target });
HashMap<MethodNode, MethodNode> replace = new HashMap();
for (MethodNode target : node.methods){
for (MethodInfo method : patch.methods){
if ((method.name.equals(method.name) || method.name.equals(method.mappedName))
&& (method.desc.equals(method.desc) || method.desc.equals(method.mappedDesc))){
MethodNode replacement = this.getReplacementMethod(patch, method);
replace.put(target, replacement);
WCLog.fine("Successfully Patched: %s at %s", new Object[] { method.name, method.desc });
patched = true;
}
}
}
if (patched){
for (MethodNode method : replace.keySet()){
MethodNode replacement = replace.get(method);
node.methods.remove(method);
node.methods.add(replacement);
}
ClassWriter writer = new ClassWriter(ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES);
node.accept(writer);
bytes = writer.toByteArray();
}
return bytes;
}
은 다른 사람이 어떤 아이디어가 있습니까 : 여기
ClassWriter writer = new ClassWriter(ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES);
node.accept(writer);
bytes = writer.toByteArray();
전체 방법이다 : 그것은 대해 이야기하고 그 자리 여기
Caused by: java.lang.NullPointerException
at org.objectweb.asm.tree.ClassNode.accept(ClassNode.java:340)
at net.winneonsword.WCClient.asm.WCClassTransformer.transform(WCClassTransformer.java:119)
at net.winneonsword.WCClient.asm.WCClassTransformer.transform(WCClassTransformer.java:64)
at net.minecraft.launchwrapper.LaunchClassLoader.runTransformers(LaunchClassLoader.java:274)
at net.minecraft.launchwrapper.LaunchClassLoader.findClass(LaunchClassLoader.java:172)
... 9 more
됩니다 : 여기
오류입니다 이 문제를 해결하는 방법?
전체 메소드 게시물에는 ClassNode node = new ClassNode(); – WinneonSword
@WinneonSword : 전체 메소드에서 OP는 ClassReader 객체가 아닌 ClassNode 객체에서 accept()를 호출하지 않으므로 스택 추적은 해당 메소드에서 벗어날 수 없습니다. – t0mppa