2015-10-16 164 views
0

我正在使用松露& Graal項目在我自己的項目中。我遇到了一個問題,即當我在Java中使用getDeclaredField()時,即使該字段存在,也會返回noSuchFieldException。getDeclaredField即使字段存在也會返回nosuchfield異常

的碼產生的例外是

Field field = NodeUtil.class.getDeclaredField("unsafeFieldOffsetProvider"); 
field.setAccessible(true); 

而字段unsafeFieldOffsetProvider在NodeUtil.java被聲明

private static final FieldOffsetProvider unsafeFieldOffsetProvider = new FieldOffsetProvider() { 

    @Override 
    public long objectFieldOffset(Field field) { 
     return unsafe.objectFieldOffset(field); 
    } 

    @Override 
    public int getTypeSize(Class<?> clazz) { 
     if (!clazz.isPrimitive()) { 
      return Unsafe.ARRAY_OBJECT_INDEX_SCALE; 
     } else if (clazz == int.class) { 
      return Unsafe.ARRAY_INT_INDEX_SCALE; 
     } else { 
      throw new UnsupportedOperationException("unsupported field type: " + clazz); 
     } 
    } 
}; 

下面是錯誤消息:

Exception in thread "main" java.lang.ExceptionInInitializerError 
at edu.uci.python.runtime.object.FixedObjectLayout.<init>(FixedObjectLayout.java:100) 
at edu.uci.python.runtime.object.FixedObjectLayout.addAttribute(FixedObjectLayout.java:149) 
at edu.uci.python.runtime.object.PythonObject.setAttribute(PythonObject.java:153) 
at edu.uci.python.runtime.standardtype.PythonModule.addDefaultConstants(PythonModule.java:45) 
at edu.uci.python.runtime.standardtype.PythonModule.<init>(PythonModule.java:41) 
at edu.uci.python.builtins.PythonDefaultBuiltinsLookup.createModule(PythonDefaultBuiltinsLookup.java:88) 
at edu.uci.python.builtins.PythonDefaultBuiltinsLookup.populateBuiltins(PythonDefaultBuiltinsLookup.java:54) 
at edu.uci.python.runtime.PythonContext.<init>(PythonContext.java:79) 
at python.truffle.toa.runtime.PythonContextOA.<init>(PythonContextOA.java:13) 
at python.truffle.toa.main.PythonMainOA.testFile(PythonMainOA.java:78) 
at python.truffle.toa.main.PythonMainOA.main(PythonMainOA.java:39) 
Caused by: java.lang.RuntimeException: java.lang.NoSuchFieldException: unsafeFieldOffsetProvider 
at edu.uci.python.runtime.object.ObjectLayoutUtil.unsafeFieldOffsetProvider(ObjectLayoutUtil.java:43) 
at edu.uci.python.runtime.object.ObjectLayoutUtil.<clinit>(ObjectLayoutUtil.java:47) 
... 11 more 
Caused by: java.lang.NoSuchFieldException: unsafeFieldOffsetProvider 
at java.lang.Class.getDeclaredField(Unknown Source) 
at edu.uci.python.runtime.object.ObjectLayoutUtil.unsafeFieldOffsetProvider(ObjectLayoutUtil.java:39) 
... 12 more 
+0

如果該字段確實在您引用的類中聲明,則不會發生。 [例子](http://ideone.com/uOOini)很明顯,它不應該真的屬於這個類;也許源文件和'.class'文件不同步?也許你正在引用一個*不同的''NodeUtil'類? –

+0

是的,就是這一點。我會仔細檢查構建路徑和項目資源。 – lhan

+0

我不知道這個Truffle&Graal項目非常好。但它是否會爲您的節點創建代理對象? – bvdb

回答

0

最後,我們想通了(我在同一項目中@lhan),其它是由我們的Eclipse項目配置的依賴關係的錯誤順序引起的......我們必須在項目的「Java Build Path」設置中的「Order and Export」選項卡中更改依賴項的順序。具體而言,我們必須將com.oracle.truffle.apicom.oracle.truffle.api.dsl放在JRE系統庫之上。

相關問題