Fehlermeldung! (Problem mit einem Prog)

Status
Nicht offen für weitere Antworten.

MacGyver

Mitglied
Ups, falsche Area! Sorry...
[Edit by Beni: verschoben]

Ich habe folgende 2 Klassen bei mir in Eclipse...

Code:
package analyse;

public aspect Test
{
    public static String Analyse.control(String message) 
    {
    		System.out.println(message + ": " + "Additional class method!");
    		
            return message;
    }

}

und

Code:
package analyse;

import java.lang.reflect.*;

public class Analyse implements Runnable
{
    private String attribute;

    public String getAttribute() 
    { 
        return attribute; 
    }
    public void setAttribute(String attribute)
    {
        this.attribute = attribute;
    }
    public Analyse() 
    {
        this.attribute = " Analyse ... ";
    }
    public Analyse(String attribute) 
    {
        this();
        this.attribute = getAttribute() + attribute;
    }
    public void run() 
    {
        try 
            { 
                Class c = Class.forName("analyse.Analyse");
                Analyse i = (Analyse) c.newInstance();
                Method[] m = c.getDeclaredMethods();
                
                m[4].invoke(Analyse.control("No, no!"), new Object[]{" OK"});
                System.out.println(i.getAttribute());
            } 
        catch (ClassNotFoundException e) 
            {
                System.out.println(
                    "Class not found exception: " + e);
            }
        catch (InstantiationException e) 
            {
                System.out.println(
                    "Instantiation exception: " + e);
            } 
        catch (IllegalAccessException e) 
            {
                System.out.println(
                    "Illegal access exception: " + e);
            } 
        catch (InvocationTargetException e) 
            {
                System.out.println(
                    "Invocation target exception: " + e);
        }
    }
    
    public static void main(String[] args) 
    {
        Analyse o = new Analyse("Problem?");
        new Thread(o).start();
        System.out.println(o.getAttribute());
    }
}

Als Ergebnis soll eigentlich folgendes herauskommen:

Analyse ... Problem?
No, no!: Additional class method!
OK: Additional class method!
Analyse ...

Aber ich bekomme nur die ersten beiden Zeilen + Fehlermeldung heraus:

Analyse ... Problem?
No, no!: Additional class method!
Exception in thread "Thread-0" java.lang.IllegalArgumentException: object is not an instance of declaring class
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at analyse.Analyse.run(Analyse.java:35)
at java.lang.Thread.run(Thread.java:619)

Liegt das evtl. daran das ich JDK1.6.0 benutze? Viell. könnte das o.g. ja mal jmd auf seinem Rechner ausprobieren. Für Hilfe zur Lösung dieses Problems wäre ich sehr dankbar!!

Gruß, Mac
 
Method#invoke:
- 1. Parameter: Das Objekt, auf dem die Methode ausgeführt wird
- 2. Parameter (varargs): Dia Argumente

Mal abgesehen davon, dass m[4] nicht gerade eine sehr saubere Lösung ist (welche Methode soll das denn sein?), sagst du, dass diese Methode Nr. 4 der Klasse Analyse auf dem Objekt aufgerufen werden soll, das von control zurückgegeben wird - und das ist ein String, und das kann ja nicht funktionieren.
Wie wäre es mit
Code:
                Analyse.control("No, no!");
                m[4].invoke(null, new Object[]{" OK"});
 
Also die Zeile...

Code:
m[4].invoke(Analyse.control("No, no!"), new Object[]{" OK"});

...muß so bleiben (Vorgabe) - aber es muß trotzdem funktionieren.

Allerdings hatte ich vergessen das der main() Methoder folgende 4 Parameter mitgegeben werden:

1 2 10 20

Bringt dich/euch das weiter?
 
Und mir ist noch etwas aufgefallen: In der Zeile...

Code:
m[4].invoke(Analyse.control("No, no!"), new Object[]{" OK"});

...ist das control bei mir rot unterstrichen mit dem Hinweis...

The method control(String) is undefined for the type Analyse
.

:bahnhof:
 
Die control-Methode kommt aus dem Aspekt... AspectJ ist sicherlich auch nur bei den wenigsten Usern hier installiert.

Edit: Sorry, aber die Zeile
Code:
m[4].invoke(Analyse.control("No, no!"), new Object[]{" OK"});
kann unter keinen Umständen funktionieren.
a) Die Klasse, zu der die Methode gehört, muss String oder eine Unterklasse sein, da control einen String zurückgibt.
b) Es kann keine Unterklasse sein, da String final ist.
c) String.class().getDeclaredMethods()[4] ist "public int java.lang.String.indexOf(int)"
d) new Object[]{" OK"} lässt sich nicht auf "int" casten.
 
Ich hab aus...

Code:
m[4].invoke(Analyse.control("No, no!"), new Object[]{" OK"});

jetzt mal...

Code:
m[4].invoke(Analyse.control("No, no!"), Analyse.control(" OK"));

...was mich immer hin 3/4 ausgeben läßt:


Analyse ... Problem?
No, no!: Additional class method!
OK: Additional class method!

Fehlst jetzt nurnoch die abschließende "Analyse ..." Zeile.

Aber werkwürdig ist es schon, zumal new Object[] {" OK"} eine Vorgabe ist und
laut java.lang.reflect.Method (public native Object invoke(Object obj, Object[] args)
ein Object-Array erwartet wird.

:autsch:
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben