使用JSNI和vaadin时出现不满意的链接错误

使用JSNI和vaadin时出现不满意的链接错误,vaadin,jsni,vaadin-spring-boot,Vaadin,Jsni,Vaadin Spring Boot,我创建了一个Vaadin项目,并使用JSNI编写脚本。但当执行到达JSNI脚本时,会显示一个错误 java.lang.UnsatisfiedLinkError: com.yty.cws.CiwsUI.jsniDemo()V at com.yty.cws.CiwsUI.jsniDemo(Native Method) ~[classes/:na] at com.yty.cws.CiwsUI.lambda$0(CwsUI.java:31) ~[classes/:na] at s

我创建了一个Vaadin项目,并使用JSNI编写脚本。但当执行到达JSNI脚本时,会显示一个错误

java.lang.UnsatisfiedLinkError: com.yty.cws.CiwsUI.jsniDemo()V
    at com.yty.cws.CiwsUI.jsniDemo(Native Method) ~[classes/:na]
    at com.yty.cws.CiwsUI.lambda$0(CwsUI.java:31) ~[classes/:na]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_92]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_92]
下面是我的示例代码

public class CiwsUI extends UI{

    private static final long serialVersionUID = 5275145103992848572L;
    VerticalLayout mainLayout=new VerticalLayout();
    private TextField txtName=new TextField();
    private Button btnJSNI=new Button("JSNI");
    @Override
    protected void init(VaadinRequest request) {

        mainLayout.addComponents(txtName,btnJSNI);
        setContent(mainLayout);
        mainLayout.setComponentAlignment(txtName, Alignment.MIDDLE_CENTER);
        mainLayout.setComponentAlignment(btnJSNI, Alignment.MIDDLE_CENTER);
        btnJSNI.addClickListener(e->{
            System.out.println("Clicked");
            jsniDemo();
        });
    }
    private native void jsniDemo()/*-{
    $wnd.alert("Hai JSNI");
    }-*/;

}
非常感谢您的帮助。

如果您查看,您会注意到除了客户端API之外,Vaadin还有一个服务器端API,您发布的代码属于这一类。搜索Vadin论坛我发现了你的确切问题。下面添加了来自Vaadin开发团队的Henry Sara的回复:

当您正在工作时,JSNI仅在客户端小部件中可用 在服务器端

使用Window.executeJavaScript(“…”)或 如果需要执行,请使用Root.executeJavaScript(“…”)(Vaadin 7) 来自服务器端应用程序的JavaScript

而自从答案和
Root.executeJavaScript(“…”)之后,情况可能已经发生了变化现在可能是
JavaScript.getCurrent().execute(…)”;
,Vaadin文档提供了关于以及关于的信息,您还可以查看更多示例