# LiveConnect find den fehler net



## RoadRunner0 (1. Mrz 2005)

Hiii,

hab da bisschen getestet aber es haut einfach nicht hin. Mein Compiler zeigt immer

```
D:\Dokumente und Einstellungen\Ute\JAVA\Test\src\Fahr_mitJS.java:162: cannot find symbol
symbol  : method setValue(int)
location: class java.applet.Applet
             document.call(applet2.setValue(1));
1 error
```

hier ein Quelltext Ausschnittchen: wär net wenn mal wer reinschauen könnte

```
JSObject document;
    JSObject applets;
    Applet applet2;

 public void init() {
    try
        {JSObject jsroot = JSObject.getWindow(this);                //doppelt hält ja bekanntlich besser ;-)
        JSObject document = (JSObject) jsroot.getMember("document");
        JSObject applets = (JSObject) document.getMember("applets");
        Applet applet2 = (Applet) applets.getSlot(2); //2.eingebundenes Applet auf html Seite
        Applet applet3 = (Applet) applets.getSlot(3); //3.
        Applet applet4 = (Applet) applets.getSlot(4); //4. ...
        Applet applet5 = (Applet) applets.getSlot(5);
        Applet applet6 = (Applet) applets.getSlot(6);
        }catch(Exception e) {
            try{
            }catch(Error err){
                //fängt alle Fehler und Exceptions ab
            }
        }
 }
public void actionPerformed(ActionEvent e){
        if (e.getSource() == EG_Schalter_aussen) {
            try
            {//document.applet2.setValue(1); //Put_aussen_EG
             document.call(applet2.setValue(1));
            } catch(Exception ex){}
            repaint();
        }
}
```

bin dankbar für jede Hilfe


----------



## RoadRunner0 (1. Mrz 2005)

```
<FORM NAME="form1">
	<INPUT TYPE="button" VALUE=" aussen im EG "
	onMousedown="document.Put_aussen_EG.setValue(1)"
	onMouseUp="document.Put_aussen_EG.setValue(0)">
```

in html file steht dies und es funzt super


----------



## RoadRunner0 (1. Mrz 2005)

hab noch bisschen was im init geändert weil das erste irgendwie schwachsinn war. aber funzt immer noch nicht
	
	
	
	





```
JSObject jsroot   = JSObject.getWindow(this);
        JSObject document = (JSObject) jsroot.getMember("document");
        JSObject applets  = (JSObject) document.getMember("applets");
        JSObject Put_aussen_EG = (JSObject) applets.getSlot(2); //2.eingebundenes Applet auf html Seite
        JSObject Put_aussen_OG = (JSObject) applets.getSlot(3); //3.
        JSObject Put_innen_EG  = (JSObject) applets.getSlot(4); //4. ...
        JSObject Put_innen_OG  = (JSObject) applets.getSlot(5);
        JSObject Tuer_auf      = (JSObject) applets.getSlot(6);
        JSObject Tuer_zu       = (JSObject) applets.getSlot(7);
        JSObject Tuer_auf_im   = (JSObject) applets.getSlot(8);
        JSObject LEDs          = (JSObject) applets.getSlot(9);
        JSObject set_Put_aussen_EG = (JSObject) Put_aussen_EG.getMember("setValue(1)");
```


----------



## Spacerat (1. Mrz 2005)

Der Fehler liegt bei den Parametern der Methode document.call() in Zeile 4 des zweiten Codeschnipsels. Diese Methode braucht einen String welcher den Namen der aufzurufenden JS-Methode enthält, sowie ein Object-Array der zu übergebenden Parameter. Für deinen Fall eignet sich LiveConnect wie es aussieht jedoch weniger. Ich würde mir die Applets der Seite üder den AppletContext besorgen. So erfährt man mit "<JavaKlasse>.class.isInstance(e.getsource())" ob die Klassen den selben Objekt-Typ haben und kann im Bedarfsfall Methoden dieses Types aufrufen.

Solltest du noch Fragen haben, nur zu...


----------



## RoadRunner0 (1. Mrz 2005)

erstma danke für die Antwort. ;-)

das sind aber Fremd-Applets auf die ich da über umwege zugreifen wollte, hat ja schon versucht eigene dazu zu schreiben aber ich kriegs halt nicht hin und von aussen kommt man nur über JavaScript oder "direkt"eingabe daran.
würde es trotzdem mit AppletContext gehen?


----------



## Spacerat (1. Mrz 2005)

In den Codeschnipseln sieht es jedenfalls so aus, als ob alle Applets in demselben Dokument sind. Ferner schliesse ich aus der Verwendung der Methode actionPerformed(ActionEvent e) das die Applets allse ActionListener sind, und deswegen z.B. einen Button haben, welcher einen ActionEvent sendet. Hier wäre mal ein Beispiel-Code, wie man mit AppletContext die Applets der Seite holt:

```
public void actionPerformed(ActionEvent)
{
    Object tmp = e.getSource().getParent() //Vater vom Button ist dein Applet, wenn im Applet selbst add
                                                              //<BUTTON>); vorkommt.
    if(<APPLETCLASSNAME1>.class.isInstance(tmp)) {
        <APPLETCLASSNAME1> a1 = (<APPLETCLASSNAME1>) tmp; //a1 ist nun ein Object des Typs <APPLETCLASSNAME1>
        AppletContext ac = a1.getAppletContext();
        for(Enumeration en = ac.getApplets(); en.hasMoreElements;) {
            Applet tmp2 = (Applet) en.nextElement();
            if(<APPLETCLASSNAME2>.class.isInstance(tmp2)) {
                <APPLETCLASSNAME2> a2 = (<APPLETCLASSNAME2>) tmp2; //a2 ist nun ein Object des Typs <APPLETCLSSNAME2>
                if(a2.<EIGENSCHAFT> == <TRUE>) a2.<MethodenName>(<PARAMETER>);
            }
        }
    }
}
```

Für <APPLETCLASSNAME1> und <APPLETCLASSNAME2> müssen die jeweiligen Klassennamen (NICHT die Applet-Namen auf der Seite!) eingefügt werden. a1 enthält die Applet-Klasse an die der ActionEvent gesendet wurde. a2 enhält eine Applet-Klasse der selben Seite auf welche nun dort definierte Methoden angewendet werden können.

Konkreter kann ich zur Zeit nicht werden, da ich werder weis, ob die Applet-Klasse stets dieselbe ist, noch deren Klassen-Name(n) bzw. Eigenschaften kenne.

cu


----------



## RoadRunner0 (1. Mrz 2005)

puhhhh sieht aber sehr komplex aus. 
das applet hier is nen eigenes und den gibts noch 4 weitere klassen. und 3 jar files.

und das setzen geht ja auch schon über javascript(JS), nur den Button muß ich immer 2 sek festhalten damit was passiert weiß auch nicht was das soll aber ok besser als wenn gar nix läuft.
Also applet gesetzt über JS-Button aber diese Button wollt ich jetz wieder entfernen und dafür die aus meinem eigenen Applet nehmen da diese sonst nur Statisten wären. 
Praktisch einmal im Kreis: WerksApplet <-> JS <-> Applet

Aber mal ne andere Frage: Hab nen Wert aus WerksApplet mittels JS ausgelesen und in meinem Applet auf die Konsole über ein JavaString ausgegeben, funzt auch aber wenn ich ne IF Abfrage mach welchen wert der String jetz hat springt er immer in den "0"-Zweig obwohl bei der Ausgabe auch ne 1 oder 2 drin steht

```
public void actionPerformed(ActionEvent e){
        if (e.getSource() == EG_Schalter_aussen) {
            //try
            //{   
                JSObject jsroot   = JSObject.getWindow(this);
                JSObject document = (JSObject) jsroot.getMember("document");
                JSObject form1    = (JSObject) document.getMember("form1");
                JSObject out      = (JSObject) form1.getMember("out");
                String val        = (String) out.getMember("value");
                //out.setMember("value","fdssdf");
                
                String tuer_merker = val;
                System.out.println(tuer_merker);
                if (tuer_merker == "1") {
                    Tuer_ist_auf_imEG = false;
                    Tuer_ist_auf_imOG = true;
                }else if (tuer_merker == "0"){
                    Tuer_ist_auf_imEG = false;
                    Tuer_ist_auf_imOG = false;
                }else if ((String)tuer_merker == "2"){
                    Tuer_ist_auf_imEG = true;
                    Tuer_ist_auf_imOG = false;
                }
            repaint();
        }
...
```


----------



## Spacerat (2. Mrz 2005)

Das ist einfach...

Bei Strings benutzt man "equals" statt "==" also z.B...

```
if (tuer_merker.equals("1") {
    //usw
}
```


----------

