-
Sziasztok!
Alapra Android Studioban nincs is ScriptEngine csak külön lib-ként tudtam berakni, de amikor használnám kifagy az app és a hibaüzenet:
java.lang.NullPointerException: Attempt to invoke interface method \'java.lang.Object javax.script.ScriptEngine.eval(java.lang.String)\' on a null object reference
Egy ideje már baszakszok vele, aki tudja hogy tudnám javítani elmondhatná.
ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine engine = mgr.getEngineByName(\"JavaScript\");
result = ((Double) engine.eval(currentaction));
display.setText(result.toString());
-
Nem használtam még ilyeneket javában. De úgy tűnik nincs JavaScript nevű engined. Úgy olvastam a java 8 ba egy nashorn nevű javascript engine van úgyhogy azt kell getelned.
http://winterbe.com/posts/2014/04/05/java8-nashorn-tutorial/
-
Köszi amint tudom kipróbálom.
-
A hiba ugyanaz, szerintem a stringet szétszedem valami forral aztán lesz ami lesz.
-
Most kipróbáltam én is nekem lefut gond nélkül.
public static void main(String [] args){
ScriptEngine engine = new ScriptEngineManager().getEngineByName(\"nashorn\");
try {
engine.eval(\"print(\'Hi\');\");
} catch (ScriptException e) {
e.printStackTrace();
}
}
Milyen IDE-t használsz?
-
Most kipróbáltam én is nekem lefut gond nélkül.
public static void main(String [] args){
ScriptEngine engine = new ScriptEngineManager().getEngineByName(\"nashorn\");
try {
engine.eval(\"print(\'Hi\');\");
} catch (ScriptException e) {
e.printStackTrace();
}
}
Milyen IDE-t használsz?
Android Studio, de már megtaláltam egy ScriptEngine nélküli megoldást, legalább nem kell növelni az app méretét libraryval.
-
Mi lett a megoldás? (Tényleg ott a címben is)
-
if (currentaction.contains(\"+\")) {
String[] array = currentaction.split(\"\\\\+\");
result = Double.parseDouble(array[0])+Double.parseDouble(array[1]);
currentaction = result.toString();
display.setText(result.toString());
} else if (currentaction.contains(\"-\")) {
String[] array = currentaction.split(\"\\\\-\");
result = Double.parseDouble(array[0])-Double.parseDouble(array[1]);
currentaction = result.toString();
display.setText(result.toString());
} else if (currentaction.contains(\"*\")) {
String[] array = currentaction.split(\"\\\\*\");
result = Double.parseDouble(array[0])*Double.parseDouble(array[1]);
currentaction = result.toString();
display.setText(result.toString());
} else if (currentaction.contains(\"/\")) {
String[] array = currentaction.split(\"\\\\/\");
result = Double.parseDouble(array[0])/Double.parseDouble(array[1]);
currentaction = result.toString();
display.setText(result.toString());
} else {
display.setText(currentaction);
}
Tudom OMFG legalább case-t használnék, de működik.
-
Nem teljesen vágom. Nem JavaScript akartál futtatni am?
-
Azt a próbálkozást már én se nagyon értem.