kramann.info
© Guido Kramann

Login: Passwort:










EmbSyst
1 day_by_day
2 Eingebettete_Systeme
..2.1 Softwareentwicklung
....2.1.1 AgileSoftwareentwicklung
....2.1.2 Verhalten
....2.1.3 Entwurfsmuster
....2.1.4 FuzzyRegler
....2.1.5 Uebung
..2.2 Arduino
....2.2.1 Uebung1
..2.3 Android
....2.3.1 UML
......2.3.1.1 Volumenberechnung
......2.3.1.2 UML_Klassendiagramm
......2.3.1.3 Konstruktor
......2.3.1.4 Statische_Variable
....2.3.2 bluej
....2.3.3 Threads
....2.3.4 Interfacedesign
....2.3.5 Android
......2.3.5.1 Getting_Started
......2.3.5.2 App
......2.3.5.3 Beispielprojekt
........2.3.5.3.1 Richtlinien
........2.3.5.3.2 Anforderungen
........2.3.5.3.3 Layout
........2.3.5.3.4 Projekt_einrichten
........2.3.5.3.5 Refactoring
........2.3.5.3.6 Icon
........2.3.5.3.7 Icon2
........2.3.5.3.8 Kurzanleitung
........2.3.5.3.9 Architektur
........2.3.5.3.10 Anwendungsklasse
......2.3.5.4 Threads
......2.3.5.5 Activities
......2.3.5.6 Was_ist_wo
......2.3.5.7 Regelungssysteme
........2.3.5.7.1 Servo
........2.3.5.7.2 Fahrzeug
......2.3.5.8 ADB_Apps
......2.3.5.9 Veroeffentlichen
......2.3.5.10 Einzelheiten
........2.3.5.10.1 Bildschirmaufloesung
........2.3.5.10.2 Parameter
........2.3.5.10.3 Permission
........2.3.5.10.4 Latenzzeit
......2.3.5.11 Tonerkennung
........2.3.5.11.1 Wahrscheinlichkeitsrechnung
........2.3.5.11.2 Kovarianz_Scilab
........2.3.5.11.3 Java_Threads
........2.3.5.11.4 Java_Reflection
....2.3.6 Processing
......2.3.6.1 Installation
......2.3.6.2 Erste_Schritte
......2.3.6.3 Mechatronik
......2.3.6.4 Bibliotheken
......2.3.6.5 Uebung
......2.3.6.6 Snippets
........2.3.6.6.1 Dateioperationen
........2.3.6.6.2 Bilder
........2.3.6.6.3 GUI
........2.3.6.6.4 Text
........2.3.6.6.5 PDF
........2.3.6.6.8 Maus
........2.3.6.6.10 Zeit
........2.3.6.6.13 Animation
........2.3.6.6.15 Simulation
......2.3.6.7 Referenzen
....2.3.7 Android_Processing
......2.3.7.1 Basics
......2.3.7.2 Einrichten
......2.3.7.3 Crossplattform
......2.3.7.4 sinus
......2.3.7.5 sample
......2.3.7.6 analyse
......2.3.7.7 synthese
......2.3.7.8 Hilfsapps
......2.3.7.9 Eigene_Library
....2.3.8 Processing_VR
....2.3.9 Shapes3D
....2.3.10 TextToSpeech
....2.3.11 Internetprogrammierung
......2.3.11.1 Codegenerierung
......2.3.11.2 PHP_Programmierung
......2.3.11.3 PHP_OOP
......2.3.11.4 Java
......2.3.11.5 UDP
......2.3.11.6 Internetkontrolle
........2.3.11.6.1 Kamerabild
....2.3.12 OSC
......2.3.12.1 Datenaustausch
......2.3.12.2 i2audiolab
......2.3.12.3 Ardour
....2.3.13 Netzwerkprogrammierung
....2.3.14 JNI
....2.3.15 Erweitern
......2.3.15.1 sprich
......2.3.15.2 spiel
....2.3.16 thbvr
....2.3.17 Reflection
....2.3.18 Script
....2.3.19 Java3D
3 Echtzeitprogrammierung
..3.1 Echtzeit
..3.2 Korrektheit
..3.2 Semaphoren
..3.3 Hardware
..3.5 Synchronprogramm
..3.6 Zustandsmaschine
..3.7 Arduino
....3.7.1 Uebung
....3.7.2 RTOS
....3.7.3 Scheduler
....3.7.4 Semaphor
......3.7.4.1 Laufkatze
......3.7.4.2 Java
......3.7.4.3 Semaphor
....3.7.5 Messages
..3.8 Android
....3.8.2 Threads
......3.8.2.1 Java
......3.8.2.2 Synchronisierung
..3.9 Petrinetze
....3.9.1 Installation
....3.9.2 Test
4 KI
..4.1 Unueberwachtes_Lernen
..4.2 Agentensysteme
....4.2.1 Architekturen
......4.2.1.1 Verhalten
......4.2.1.2 Entwurfsmuster
....4.2.2 SUMO
......4.2.2.1 GettingStarted
......4.2.2.2 Antrieb
......4.2.2.3 Sensoren
......4.2.2.4 Zeitbasis
......4.2.2.5 Fernsteuerung
......4.2.2.6 Umsetzung_Fernst
......4.2.2.7 Fernsteuerung3
......4.2.2.10 Umsetzung
......4.2.2.11 Sockelsoftware
......4.2.2.12 Plan
......4.2.2.13 Lernen
........4.2.2.13.1 Parameter
........4.2.2.13.2 Identifikation
........4.2.2.13.3 Java
..4.3 Genetische_Algorithmen
....4.3.1 Heuristiken
....4.3.2 Genalgorithmus
..4.4 Kalmanfilter
....4.4.1 Vorarbeit
....4.4.2 Minimalversion
....4.4.3 Beispiel
5 Bildverarbeitung
..5.1 Gestalttheorie
..5.2 Bildverarbeitung
6 Technische_Systeme
..6.1 Kulturgeschichte
..6.2 Technikphilosophie
..6.3 Anthropozaen
7 Literatur
kramann.info
© Guido Kramann

Login: Passwort:




Script-Verarbeitung in Java

  • An kleinen Beispielen soll Schritt für Schritt die Benutzung von Java-Reflection beschrieben werden.
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
  • Weiter unten sehen Sie ein elementares Programm "Textladen", um Strings zu laden und zu speichern.
  • Schreiben Sie auf Grundlage von Textladen und Skript3 ein Simulationsprogramm, das das zu integrierende Modell aus einer Textdatei holt, in der es als Skript vorliegt.
  • Als weitere Variante soll nun das Modell über ein TextArea-Feld in einem Applet eingegeben werden.
  • Auf Knopfdruck soll dann eine Simulation davon durchgeführt werden.
  • Die Ergebnisse sollen als Plot angezeigt werden.
  • Alternativ sollen die Zeitverläufe der Zustandsgrößen an ein anderes Applet geschickt werden und dort angezeigt werden.
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.