Script-Verarbeitung in Java
|
javascriptengine.zip - nachfolgende Beispiele.
Elementare Benutzung der eines ScriptEngine-Objektes
import java.io.InputStreamReader;
import javax.script.*;
public class Script1
{
public static void main(String[] args)
{
ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript");
engine.put("x","45");
engine.put("y","15");
try
{
// engine.eval("z=abs(x)+180*Math.sin(x)/Math.PI;");
// engine.eval("z=Math.abs(x)+Math.abs(y);");
// engine.eval("z=Math.abs(0)+x+y;");
String skript = "function funk(Zahl) { return Zahl*Zahl }";
// engine.eval(skript+"\nz=funk(7);");
engine.eval(skript);
engine.eval("z=funk(7);");
}
catch(Exception e)
{
System.out.println(e);
}
Object z = engine.get("z");
System.out.println(z.toString());
}
}
Code 0-1: Elementare Benutzung der eines ScriptEngine-Objektes.
Handhabung von Arrays
import java.io.InputStreamReader;
import javax.script.*;
public class Script2
{
public static void main(String[] args)
{
ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript");
String skript = "";
skript += "var f = new Array(2);\n";
skript += "f[0]=1;\n";
skript += "f[1]=2;\n";
skript += "var x = f[0]+f[1];\n";
try
{
engine.eval(skript);
}
catch(Exception e)
{
System.out.println(e);
}
Object x = engine.get("x");
System.out.println(x.toString());
}
}
Code 0-2: Handhabung von Arrays.
Beschreibung eines DGLS als Skript und dessen Integration
import java.io.InputStreamReader;
import javax.script.*;
import java.lang.reflect.Array;
import sun.org.mozilla.javascript.NativeArray;
public class Script3
{
public static String wandleArray(double[] arr)
{
StringBuffer erg = new StringBuffer();
erg.append("new Array(");
for(int i=0;i<arr.length;i++)
{
erg.append(arr[i]+"");
if(i<arr.length-1)
erg.append(",");
}
erg.append(")");
return erg.toString();
}
public static void main(String[] args)
{
ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript");
StringBuffer sb = new StringBuffer();
sb.append("var f = new Array(2);\n");
sb.append("var C = 1.0;\n");
sb.append("var D = 0.1;\n");
sb.append("function rechteSeite(y,t)\n");
sb.append("{\n");
sb.append(" y = eval(y);\n");
sb.append(" f[0] = y[1];\n");
sb.append(" f[1] = -C*y[0]-D*y[1];\n");
sb.append(" return f;\n");
sb.append("}\n");
//Funktion und Parameter bereitstellen:
try
{
engine.eval(sb.toString());
}
catch(Exception e)
{
System.out.println(e);
}
//Rechte Seite über das Euler-Verfahren auswerten:
NativeArray ff = null;
double[] y = new double[] {1.0,0.0};
double[] rechteSeite = new double[] {0.0,0.0};
double t = 0.0;
double dt = 0.05;
for(int tt=0;tt<100;tt++)
{
try
{
ff = (NativeArray)( engine.eval("rechteSeite("+wandleArray(y)+","+t+")") );
}
catch(Exception e)
{
System.out.println(e);
}
for(int i=0;i<ff.getLength();i++)
rechteSeite[i] = Double.parseDouble( ff.get(i,null).toString() );
y[0]+=rechteSeite[0]*dt;
y[1]+=rechteSeite[1]*dt;
System.out.println(t+" "+y[0]);
t+=dt;
}
}
}
Code 0-3: Beschreibung eines DGLS als Skript und dessen Integration.
Übung
|
|
import java.io.*;
public class Textladen
{
public static void main(String[] args)
{
if( !( new File("vorname.txt") ).exists() )
{
BufferedReader pufferleser = new BufferedReader(new InputStreamReader( System.in ));
System.out.println("Geben Sie bitte Ihren Vornamen ein (mit ENTER bestaetigen):");
try
{
speichern( pufferleser.readLine() );
}
catch(IOException e) { }
}
try
{
FileReader meinLeser = new FileReader( new File("vorname.txt") );
StringBuffer puffer = new StringBuffer();
int zeichen = meinLeser.read();
while( zeichen!=-1 )
{
puffer.append((char)zeichen);
zeichen = meinLeser.read();
}
System.out.println("Hallo "+puffer.toString()+"!");
meinLeser.close();
}
catch(IOException e) { }
}
public static void speichern(String vorname)
{
try
{
PrintWriter meinPrinter = new PrintWriter( new FileWriter(new File("vorname.txt")) );
meinPrinter.print(vorname);
meinPrinter.close();
}
catch(IOException e) { }
}
}
Code 0-4: Klasse Textladen.