2013-10-15 12 views
6

JavaファイルをコンパイルするときにIntelliJプロジェクトでこのエラーが発生する。特定のソースファイルはリストされていませんが、このエラーで失敗します。以下のコンパイラフラグを削除コンパイルエラー:computeFramesオプションでJSR/RETがサポートされない

は、エラーが修正されています。

-source 1.5 -target 1.5 

はしかし、これらは、私たちは、Java 5をターゲットにしているとして、そこにする必要があり、これを引き起こしているいくつかの特定のコード(多分try/catchブロック)ありますエラー?

2013-10-15 16:21:50,556 [26947209] INFO - ompiler.BackendCompilerWrapper - JSR/RET are not supported with computeFrames option 
java.lang.RuntimeException: JSR/RET are not supported with computeFrames option 
    at org.objectweb.asm.Frame.a(Unknown Source) 
    at org.objectweb.asm.MethodWriter.visitJumpInsn(Unknown Source) 
    at org.objectweb.asm.MethodAdapter.visitJumpInsn(Unknown Source) 
    at org.objectweb.asm.ClassReader.accept(Unknown Source) 
    at org.objectweb.asm.ClassReader.accept(Unknown Source) 
    at com.intellij.compiler.impl.javaCompiler.BackendCompilerWrapper$ClassParsingThread.a(BackendCompilerWrapper.java:893) 
    at com.intellij.compiler.impl.javaCompiler.BackendCompilerWrapper$ClassParsingThread.run(BackendCompilerWrapper.java:846) 
    at com.intellij.openapi.application.impl.ApplicationImpl$7.run(ApplicationImpl.java:386) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439) 
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918) 
    at java.lang.Thread.run(Thread.java:680) 
    at com.intellij.openapi.application.impl.ApplicationImpl$1$1.run(ApplicationImpl.java:130) 
+0

誰かがこのエラーの解決策(JSR/RET computeFramesオプションでサポートされていない)を持っていますか? –

+0

'JSRInlinerAdapter'が私のために働いた:http://mail-archive.ow2.org/asm/2008-11/msg00008.html – mschonaker

答えて

1

try/finallyブロックがソースに表示されると、JSR/RET命令がバイトコードで表示されます。 Javac 1.6+は-target 1.5でもそれらを放出するとは思われませんが、EclipseのJavaコンパイラはそれを行います。

public class JSRDemo { 
    public static void main(String[] args) { 
     try { 
      bodyOfTry(); 
     } 
     finally { 
      bodyOfFinally(); 
     } 
    } 

... 

バイトコード

// access flags 0x9 
    public static main([Ljava/lang/String;)V 
    TRYCATCHBLOCK L0 L1 L1 null 
    TRYCATCHBLOCK L2 L3 L1 null 
    L0 
    LINENUMBER 4 L0 
    INVOKESTATIC JSRDemo.bodyOfTry()V 
    L4 
    LINENUMBER 5 L4 
    GOTO L2 
    L1 
    LINENUMBER 6 L1 
    ASTORE 2 
    JSR L5    // JSR jumps to the finally block 
    L6 
    LINENUMBER 8 L6 
    ALOAD 2 
    ATHROW 
    L5 
    LINENUMBER 6 L5 
    ASTORE 1 
    L7 
    LINENUMBER 7 L7 
    INVOKESTATIC JSRDemo.bodyOfFinally()V 
    L8 
    LINENUMBER 8 L8 
    RET 1     // RET returns from the finally block 
    L2 
    JSR L5    // Jump to the same finally block from another execution path 
    L3 
    LINENUMBER 9 L3 
    RETURN 
    L9 
    LOCALVARIABLE args [Ljava/lang/String; L0 L9 0 
    MAXSTACK = 1 
    MAXLOCALS = 3 
+1

それではどうやって修正されましたか? – stealthjong

+0

@stealthjong私は、 'javac'に切り替えると役立つかもしれないと思います –

関連する問題