Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выполнение JavaScript в Java-программе 
:(
    Опции темы
Sveta7
  Дата 16.5.2010, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 16.5.2010

Репутация: нет
Всего: нет



Здравствуйте!
Мне нужно выполнить по нажатию кнопки введенный пользователем в jEditorPane  JavaScript. Я новичок, поэтому не имею понятия как это делается... Помогите пожалуйста.
PM MAIL   Вверх
aleksandy
Дата 17.5.2010, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 260
Регистрация: 17.12.2006

Репутация: 1
Всего: 5



Вот простейший выполнитель js-скриптов.
Код

import java.util.HashSet;
import java.util.Set;
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

public enum ScriptExecutor {
  JS;

  private final ScriptEngineManager manager = new ScriptEngineManager();
  private final ScriptEngine engine;
  private Set<String> scripts = new HashSet();

  private ScriptExecutor() {
    engine = manager.getEngineByName(name().toLowerCase());
  }

  public void addScript(String script)
    throws ScriptException {
    if (this.scripts.contains(script))
      return;
    this.scripts.add(script);
    this.engine.eval(script);
  }

  public <T> T invokeFunction(String function, Class<T> retClass, Object[] params)
    throws ScriptException, NoSuchMethodException
  {
    Invocable localInvocable = (Invocable)this.engine;
    return retClass.cast(localInvocable.invokeFunction(function, params));
  }
}

Использовать приблизительно так:
Код
public static void main(String[] args) throws ScriptException, NoSuchMethodException {
    ScriptExecutor.JS.addScript("function fooBar() {return 'Hello, World!!!'}");
    System.out.println(ScriptExecutor.JS.invokeFunction("fooBar", String.class, null));
}


Это сообщение отредактировал(а) aleksandy - 17.5.2010, 11:10
PM   Вверх
Sveta7
Дата 17.5.2010, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 16.5.2010

Репутация: нет
Всего: нет



Спасибо) Я в обработчике нажатия кнопки пишу
Код

        try
        {
        ScriptEngineManager manager=new ScriptEngineManager();
        ScriptEngine javaScriptEngine= manager.getEngineByName("JavaScript");
        javaScriptEngine.eval("var msgl='ВСЕМ'; var msgl1 = msgl + ' привет'; println(msgl1);");
        }
        catch(ScriptException ex){ex.printStackTrace();}

появляется ошибка: 
Код

javax.script.ScriptException: sun.org.mozilla.javascript.internal.EcmaError: ReferenceError: "alert" is not defined. (<Unknown source>#1) in <Unknown source> at line number 1
        at com.sun.script.javascript.RhinoScriptEngine.eval(RhinoScriptEngine.java:110)
        at com.sun.script.javascript.RhinoScriptEngine.eval(RhinoScriptEngine.java:124)
        at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:247)
        at kurs.Frame.jButton1MouseClicked(Frame.java:322)
        at kurs.Frame.access$000(Frame.java:20)
        at kurs.Frame$1.mouseClicked(Frame.java:55)
        at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:253)
        at java.awt.Component.processMouseEvent(Component.java:6041)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3260)
        at java.awt.Component.processEvent(Component.java:5803)
        at java.awt.Container.processEvent(Container.java:2058)
        at java.awt.Component.dispatchEventImpl(Component.java:4410)
        at java.awt.Container.dispatchEventImpl(Container.java:2116)
        at java.awt.Component.dispatchEvent(Component.java:4240)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3995)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
        at java.awt.Container.dispatchEventImpl(Container.java:2102)
        at java.awt.Window.dispatchEventImpl(Window.java:2429)
        at java.awt.Component.dispatchEvent(Component.java:4240)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)

Подскажите, в чем проблема пожалуйста.
PM MAIL   Вверх
aleksandy
Дата 18.5.2010, 05:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 260
Регистрация: 17.12.2006

Репутация: 1
Всего: 5



Странно, у меня все работает. А какая у тебя версия jvm?

Если верить гуглу, то ты привела не тот код smile. Убери из своих скриптов alert() и будет тебе счастье.

Это сообщение отредактировал(а) aleksandy - 18.5.2010, 06:02
PM   Вверх
Sveta7
Дата 18.5.2010, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 16.5.2010

Репутация: нет
Всего: нет



Да, спасибо)) Я догадываюсь, что если alert убрать, то всё в порядке будет)) От безысходности сделала println smile А образец дал научный руководитель, так что спорить не буду))
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0418 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.