Java - ScriptEngineManager nashorn Math.random 不起作用
Java - ScriptEngineManager nashorn Math.random does not work
我调用以下函数,函数名称为"random",参数为"1 and 50"。
private String callFunction(String functionName, String[] parameter)
throws FileNotFoundException, ScriptException, NoSuchMethodException {
ScriptEngineManager engine = new ScriptEngineManager().getEngineByName("nashorn");
engine.eval(new FileReader(myPath + functionName + ".js"));
Invocable invocable = (Invocable) engine;
Object result;
if (parameter == null) {
result = invocable.invokeFunction(functionName);
} else {
result = invocable.invokeFunction(functionName, parameter);
}
System.out.println(result);
return (String) result;
}
随机.js的内容看起来像:
function random(min, max){
return Math.floor(Math.random() * (max - min +1)) + min;
}
结果永远不会介于 1 和 50 之间。它总是超过 100。
如果我不在 java 中使用它,它可以工作。在java中从nashorn/javascriptoherwise进行数学工作?
更新:
我的解决方案是:
private String callFunction(String functionName, String parameter)
throws FileNotFoundException, ScriptException, NoSuchMethodException, ClassCastException {
String result = "";
engine.eval(new FileReader(PropertiesHandler.getFullDynamicValuePath() + functionName + ".js"));
if (parameter == null) {
result = (String) engine.eval(functionName + "();");
} else {
result = (String) engine.eval(functionName + parameter + ";");
}
return (String) result;
}
所以我可以使用不同类型的参数。
我稍微
调整了一下您的示例,您无法将ScriptEngine
分配给ScriptEngineManager
,并且不清楚您如何显示随机值,或者您如何调用random
。但是,这会在1
和50
之间生成 100 个随机值
public static void main(String[] ar) {
String script = "function random(min, max) { "
+ "return Math.floor(Math.random() * (max - min + 1)) + min; }";
ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
try {
engine.eval(script);
for (int i = 0; i < 100; i++) {
engine.eval("print(random(1, 50));");
}
} catch (ScriptException e) {
e.printStackTrace();
}
}
添加到 Elliot 的例子中,您传入的参数一定有问题。 以下内容还会生成 100 个介于 1 和 50 之间的值。
public static void main(String[] ar) {
String script = "function random(min, max) { "
+ "return Math.floor(Math.random() * (max - min + 1)) + min; }";
ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
Invocable invocable = (Invocable)engine;
try {
engine.eval(script);
for (int i = 0; i < 100; i++) {
Double result = (Double)invocable.invokeFunction("random", 1, 50);
System.out.println(result.intValue());
}
} catch (ScriptException | NoSuchMethodException e) {
e.printStackTrace();
}
}
相关文章:
- electronic BrowserWindow的最小高度和宽度在hide()show()方法之后不起作用
- 监视函数从服务返回不起作用,但作用域函数起作用
- 幻灯片滚动javascript不起作用
- 简单的javascript在Shopify中不起作用
- Recaptcha在IE7和IE8中不起作用
- Ember Data DS.Model's set函数不起作用
- JsFiddle上的鼠标事件不起作用
- 我的AngularJS表达式没有'不起作用
- 点击按钮输入不起作用
- 面向对象的Javascript代码在IE7中不起作用
- 分部隐藏在jquery中不起作用
- 在phonegap应用程序内部重定向不起作用
- Array.length似乎不起作用;console.log则显示其他情况
- $ionicplatform内的$scope不;不起作用
- 我的javascript for循环不起作用
- Meteor-添加用户自定义字段的方法不起作用
- 为什么 .focus() 不起作用,而 .css(“color”,“red”) 在同一个选择器上起作用
- Textarea必需的attribut在javascript中不起作用
- 为什么javascript:void(0)在Firefox中不起作用
- Java - ScriptEngineManager nashorn Math.random 不起作用