使用带有vaadin的JSNI的UnsatisfiedLinkError

时间:2016-07-21 07:14:38

标签: 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 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");
    }-*/;

}

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

如果查看differences between GWT & Vaadin,您会注意到除了cliend-side API之外,Vaadin还有一个服务器端API,您发布的代码属于该类别。正在搜索Vadin论坛,我发现了this question您遇到的确切问题。加上来自Vaadin开发团队的Henry Sara的回复:

  

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

     

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

虽然自答案后事情可能已发生变化,Root.executeJavaScript("...");现在可能JavaScript.getCurrent().execute(...)");,但Vaadin文档提供有关javascript interactions to and from the serverside以及js components and extensions以及您的信息可以查看wiki以获取更多示例。