代码之家  ›  专栏  ›  技术社区  ›  SatheeshRaj

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

  •  1
  • SatheeshRaj  · 技术社区  · 9 年前

    我创建了一个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 回复  |  直到 9 年前
        1
  •  1
  •   ollitietavainen vinayak    4 年前

    differences between GWT & Vaadin 您会注意到,除了cliend端API之外,Vaadin还有一个服务器端API,您发布的代码也属于这一类。搜索我找到的瓦丁论坛 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 更多示例。