Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Что делает ключевое слово native?


Автор: Dims 6.10.2009, 10:53
Что может означать вот такой код (внутри определения класса):

Код

private static native JavaScriptObject initTypeMap() /*-{
    return {
      "boolean": @com.google.gwt.json.client.JSONParser::createBoolean(Z),
      "number": @com.google.gwt.json.client.JSONParser::createNumber(D),
      "string": @com.google.gwt.json.client.JSONParser::createString(Ljava/lang/String;),
      "object": @com.google.gwt.json.client.JSONParser::createObject(Ljava/lang/Object;),
      "function": @com.google.gwt.json.client.JSONParser::createObject(Ljava/lang/Object;),
      "undefined": @com.google.gwt.json.client.JSONParser::createUndefined(),
    }
  }-*/;


Что конкретно происходит при его выполнении?

У меня на нём возникает ошибка:
Код

Exception in thread "main" java.lang.UnsatisfiedLinkError: com.google.gwt.json.client.JSONParser.initTypeMap()Lcom/google/gwt/core/client/JavaScriptObject;
        at com.google.gwt.json.client.JSONParser.initTypeMap(Native Method)
        at com.google.gwt.json.client.JSONParser.<clinit>(JSONParser.java:29)
        at gwtjsonexperiments.Main.main(Main.java:30)
Java Result: 1


В чём может быть проблема? Все имеющиеся DDL-ки я загрузил.

Что ей надо от класса com/google/gwt/core/client/JavaScriptObject? Вроде, такой класс в библиотеке присутствует...

Добавлено через 10 минут и 35 секунд
Не знаю, может в DLL должна быть ответная часть? Я её там не нахожу...

Автор: barin_Student 6.10.2009, 11:15
наскока я понимаю native, указывает на нативный метод... то есть скорее всего метод будет работать из DLL.. что то так по моему smile 

Автор: LSD 6.10.2009, 11:34
Цитата(Dims @  6.10.2009,  10:53 Найти цитируемый пост)
В чём может быть проблема? Все имеющиеся DDL-ки я загрузил.

Значит не все, именно об этом и говорит UnsatisfiedLinkError. Попробуй взять dll и комплекта поставки библиотеки и положить их в JDK\bin. Если не поможет попробуй загрузить их руками перед вызовом метода.



Цитата(Dims @  6.10.2009,  10:53 Найти цитируемый пост)
Что ей надо от класса com/google/gwt/core/client/JavaScriptObject?

Надо чтобы он был загруже и все, просто он входит в сигнатуру метода, потому его и вывели..

Автор: AntonSaburov 6.10.2009, 12:13
http://www.java-course.ru/articles/jni.html

Автор: Samotnik 6.10.2009, 13:10
http://www.javaworld.com/javaworld/javatips/jw-javatip23.html

Автор: Atum 25.12.2009, 16:40
Цитата(Dims @ 6.10.2009,  10:53)
Что может означать вот такой код (внутри определения класса):

добавьте в  Ваш Main.gwt.xml 

помимо 

Код

<inherits name="com.google.gwt.user.User" />


еще и 

Код

<inherits name="com.google.gwt.json.JSON" />


native Это обертка на javascript  
На стороне сервера и при компиляции у Вас Java код , 

а В Браузере - javascript   . поэтому при компиляции нужно сопоставить и перевести java в  javascript   , а 

java объекты  в JSON для их  пересылки и отображении в браузере.

Этим занимается GWT компилятор - превращает Ваш Java код в Javascript. 

в принципе вы можете с помощью native кода написать обертку над любым javascript ' oм .  

и получить доступ к  DOM у браузера : 

например : 

Код

  public native El click() /*-{
    var dom = this.@com.extjs.gxt.ui.client.core.El::dom;
    if (dom.click) {
      dom.click();
    }
    else {
      var event = $doc.createEvent("MouseEvents");
      event.initEvent('click', true, true, $wnd, 0, 0, 0, 0, 0, false, false, false, false, 1, dom);
      dom.dispatchEvent(event);    
    }
    return this;
  }-*/;




Автор: Saphir 26.5.2010, 21:40
Не стал создавать новую тему, ошибка та же 
unexpected exception: java.lang.UnsatisfiedLinkError: com.google.gwt.json.client.JSONParser.initTypeMap()Lcom/google/gwt/core/client/JavaScriptObject;
Возникает в таком месте
Код

JSONValue value = JSONParser.parse(str);

str строка в JSON формате.

Строка ниже включена в Main.gwt.xml
Код

<inherits name="com.google.gwt.json.JSON" />


Подскажите пожалуйста в чем может быть дело.  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)