javascript engine string ausführen

julian.veh

Bekanntes Mitglied
Hi All

In der letzten Zeit gibt es viele Fragen von mir, aber mein Lehrer kann mir nie weiterhelfen wenn ich eine Frage habe und kennt nur die Befehle von seinem komischen Java-Hamster oder so =/.

Ich bin dabei einen Taschenrechner zu programmieren. Habe meinen Code jetzt so verändert dass es nur 1 Textfeld gibt wo alles eingegeben werden kann und auch ausgegeben wird. Jetzt ist mein Problem, dass ich den String ja irgendwie ausführen muss. Habe schon was über Parser hier im Forum gelesen, was mir allerdings etwas zu kompliziert war. Habe nun von jemandem den Tipp bekommen das Javascript Engine eine einfachere Möglichkeit wäre. Einfacher ist schon mal gut, aber wie kann ich es einbauen? Habe kein bisschen Ahnung von Javascript, und in Java bin ich auch noch am Anfang.

Wäre nett wenn ihr mir helfen könntet 🙂.

Grüße Julian
 
Java:
        JButton button9 = new JButton("=");
        button9.addActionListener(new ActionListener() {   @Override
                                                            public void actionPerformed(ActionEvent action)
                                                            {     
String a = tf1.getText();                                                   
                                                                ScriptEngineManager manager = new ScriptEngineManager();
                                                                ScriptEngine engine = manager.getEngineByName("javascript");
                                                            }
        });


Das habe ich jetzt und wie geht es weiter?
 
Java:
public void actionPerformed(ActionEvent action)
                                                            {
                                                                String input = tf1.getText();
                                                                ScriptEngineManager manager = new ScriptEngineManager();
                                                                ScriptEngine engine = manager.getEngineByName("javascript");
                                                                engine.put("bla", input);
                                                                String script = "var ergebnis = bla";
                                                                Object result = engine.get("ergebnis");
                                                                engine.eval(script);
                                                                Object result = engine.get("ergebnis");
                                                                System.out.println("" + ergebnis);
                                                                                                                            
                                                            }


Kann mir jemand sagen was ich falsch gemacht habe?
 
Java:
	public static void main(String[] args) {
		ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript");
		String a = "1+2*3";
		try {
			System.out.println(engine.eval(a));
		} catch (ScriptException e) {
			e.printStackTrace();
		}
	}

Das funktioniert bei mir.

Wo a herkommt oder wo das Ergebnis von engine.eval() hinkommt, ist relativ egal.

Wieso versuchst du deinen Term denn in eine (JS-)Variable zu packen?

Ausserdem:
- Du Hast "Object result" 2x (geht nicht)
- Du gibst ergebnis und nicht result aus ("ergebnis" gibt es nicht deinem Java, die Variable ist nur innerhalb der Engine)
- Es muss ein try/catch um das eval.
- deine Variable bla wird von der Engine als String interpretiert.
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben