You are viewing a plain text version of this content. The canonical link for it is here.
Posted to bcel-user@jakarta.apache.org by Eshwari PattapathuSubramanianSundaran <es...@yahoo.com> on 2005/09/11 04:09:45 UTC
Help needed regarding try - catch block
Hi,
I'm trying to encapsulate an instruction in a try block and in the catch block, I'm trying to add a series of instructions as instruction list. Here is the code for the same
try_start = linenogen[lineindex].getInstruction();
GOTO g = new GOTO(null);
InstructionHandle try_end = il.append(g);
InstructionList catchlist = new InstructionList();
InstructionFactory factory = new InstructionFactory(mpool);
catchlist.append(factory.createFieldAccess("java.lang.System", "out", p_stream,
Constants.GETSTATIC));
catchlist.append(new PUSH(mpool, "Exception caught"));
catchlist.append(factory.createInvoke("java.io.PrintStream", "println", Type.VOID,
new Type[] { Type.STRING }, Constants.INVOKEVIRTUAL));
InstructionHandle catch_inst = il.append(catchlist);
methodGen.addExceptionHandler(try_start, try_end, catch_inst, exception);
g.setTarget(ihnext);
methodGen.setMaxStack();
classgen.removeMethod(methods[mindex]);
classgen.addMethod(methodGen.getMethod());
il.dispose();
When I try to run the modified class, I get the following exception.
java.lang.VerifyError: (class: bcelPackage/CorrectiveClass, method: printString signature: ()V) Falling off the end of the code
at InsertTryCatch.main(InsertTryCatch.java:43)
Exception in thread "main"
If the catchlist has only the return instruction, InstructionConstants.RETURN, then the class compiles and runs perfectly without any errors.
Please help me where I'm going wrong.
Thanks,
Eshwari
---------------------------------
Click here to donate to the Hurricane Katrina relief effort.