Получить Rhino JS, чтобы увидеть класс Java - PullRequest
4 голосов
/ 19 декабря 2010

Я играю с Rhino , и мне удалось использовать классы Java из stdlib, но не из кода Java, который я скомпилировал здесь.

Например, это работает нормально:

print(new java.util.Date());

Но с NanoHTTPD (один файл .java, нет пространства имен, та же папка), мне совсем не повезло:

js> new Packages.NanoHTTPD()
js: "<stdin>", line 4: uncaught JavaScript runtime exception: TypeError: [JavaPackage NanoHTTPD] is not a function, it is object.
    at <stdin>:4

Я уверен, что это что-то простое.Чего мне не хватает?

РЕДАКТИРОВАТЬ : я запускаю это так:

$ CLASSPATH=. java -jar rhino.jar

или это:

$ java -classpath . -jar rhino.jar

Или япереместил NanoHTTPD.java в папку «./nano», добавил package nano; в начало файла, скомпилировал его и заменил «.»с "nano" в вышеупомянутых назначениях classpath.

Любым способом, которым я это делаю, в интерпретаторе я вижу:

js> java.lang.System.getProperty("java.class.path")
/Users/me/blah/rhino.jar

Ответы [ 4 ]

6 голосов
/ 19 декабря 2010

Вам нужно запустить Rhino следующим образом:

java -cp /path/to/rhino/js.jar:. org.mozilla.javascript.tools.shell.Main

Это добавит текущий каталог в classpath.Использование -jar расширяет путь к классам.(Разделитель пути к классам зависит от вашей ОС.)

Затем попробуйте

js> Packages.NanoHTTPD
[JavaClass NanoHTTPD]

Если он говорит [JavaPackage NanoHTTPD], это означает, что он не нашел класс с таким именем.

Вы все равно не можете создать экземпляр NanoHTTPD, так что я думаю, вы хотите попробовать Packages.NanoHTTPD.main([]) или что-то еще.

2 голосов
/ 10 мая 2013

Если вы не планируете использовать свои собственные предложения в Rhino, обычно вы запускаете его следующим образом:

java -jar ./js.jar

Проблема с использованием ключа -jar заключается в том, чтовы не можете определить classpath в этом случае и без установки classpath вы не можете получить доступ к вашим собственным пакетам и классам.
Чтобы иметь возможность установить classpath, вам нужно запустить Rhino с помощью переключателя -cp,В этом случае вы устанавливаете переключатель classpath с помощью -cp, который должен включать пакет Rhino и ваши пакеты, а также вам необходимо передать путь к основному классу Rhino внутри пакета (org.mozilla.javascript.tools.shell.Main)

Вот примерКак добавить свои собственные пакеты в путь к классам Rhino:
Предположим, что ваш класс mypackage.myclass помещен в mylib.jar Если вы хотите, чтобы этот класс был доступен в вашем сеансе Rhino, вам нужно запустить Rhino следующим образом:

java -cp "./js.jar;../mylib.jar" org.mozilla.javascript.tools.shell.Main

Затем вы можете получить доступ к своему классу:

jc> mc_obj = new Packages.mypackage.myclass()

2 голосов
/ 28 января 2013

В моем Linux я обнаружил, что команда 'rhino' является сценарием оболочки, который запускает 'org.mozilla.javascript.shell.Main' с опцией '-classpath'.Вы можете отредактировать файл, чтобы включить путь к вашему классу.Я думаю, что сценарий говорит само за себя.Если вы используете Linux, введите:

less `which rhino`
0 голосов
/ 19 декабря 2010

Убедитесь, что текущий каталог включен в ваш путь к классам.Путь к классу по умолчанию является текущим каталогом, но если путь к классу был установлен на что-то другое (скажем, сценарием запуска rhino), вы можете столкнуться с этим.

Вы также можете попытаться поместить свой тестовый класс в пакет, просто чтобы увидеть, есть ли у него какая-то особенность с классами верхнего уровня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...