在javascript中使用java对象时发生IllegaccessException

在javascript中使用java对象时发生IllegaccessException,java,javascript,javafx,javafx-webengine,Java,Javascript,Javafx,Javafx Webengine,我将使用WebView/WebEngine显示简单多人游戏的“日志”(即聊天信息、游戏状态信息等) 下面是我在javascript部分写的内容 函数addLogMessage(o){ var kind=o.getMessageKindCase(); if(kind.equals(kind.CHAT_消息)){ $(“body”).append(createChatMessage(o.getChatMessage()); }else(/*以下其他情况…*/) } 函数addLogMessages(

我将使用WebView/WebEngine显示简单多人游戏的“日志”(即聊天信息、游戏状态信息等)

下面是我在javascript部分写的内容

函数addLogMessage(o){
var kind=o.getMessageKindCase();
if(kind.equals(kind.CHAT_消息)){
$(“body”).append(createChatMessage(o.getChatMessage());
}else(/*以下其他情况…*/)
}
函数addLogMessages(l){
var n=l.大小();
对于(变量i=0;i
下面是我在java部分写的内容

private GameStatus GameStatus;
私有网络引擎logWebEngine;
私有最终ObjectProperty窗口=新的SimpleObjectProperty(此“窗口”);
公共void初始化(URL、ResourceBundle rb){
游戏状态=/*…*/;
addListener((o,oldValue,newValue)->{
if(newValue==null){
回来
}
//getLogMessages()将返回java.util.List
调用(“addLogMessages”,gameStatus.getLogMessages());
});
logWebEngine=logView.getEngine();
logWebEngine.getLoadWorker().stateProperty().addListener((o,oldValue,newValue)->{
if(newValue==Worker.State.successed){
set((JSObject)logWebEngine.executeScript(“窗口”);
}
});
logWebEngine.load(getClass().getResource(“log.html”).toString());
}
当我从java端调用addLogMessage()时,它按预期工作。 但是,调用addLogMessages()会导致以下异常

线程“JavaFX应用程序线程”java.lang.IllegalAccessException中的异常:类sun.reflect.misc.Trampoline无法访问类java.util.Collections$UnmodifiableCollection的成员,带有修饰符“public”

addLogMessages中的
l.size()
似乎导致了此异常

这个例外的原因是什么?那么,这个问题有什么解决办法吗?
提前谢谢。

塞拉的评论对我很有帮助

不起作用:

DatumFunction<Double> datumFunction = new DatumFunction<Double>(){

        @Override
        public Double apply(int d) {
            String result  = "" + d;
            return value;
        }

};
DatumFunction DatumFunction=新的DatumFunction(){
@凌驾
公共双应用(int d){
字符串结果=“d”;
返回值;
}
};
是否有效:

DatumFunction<Double> datumFunction = new DoubleDatumFunction();
DatumFunction DatumFunction=新的DoubleDatumFunction();

公共类DoubleDatumFunction实现DatumFunction{
@凌驾
公共字符串应用(int d){
字符串结果=“d”;
返回值;
}
}

如果我从第二个示例的类中删除public修饰符,该示例将不再有效

可能有问题-反射不支持匿名内部类。
public class DoubleDatumFunction implements DatumFunction<Double> {
        @Override
        public String apply(int d) {
            String result  = "" + d;
            return value;
        }
    }