Hallo,
Mein Programm soll verschiedene Sortieralgorithmen graphisch darstellen.
Sortieralgorithmen sollen nebenläufig ablaufen und es soll möglich sein, modular weitere Sortierallgorithmen hinzuzufügen.
Algorithmus schreibt man mit nur einem l. Oben schreibst du es zweimal
richtig. Danach immer falsch, auch im Quellcode.
- Für die Modularität setze ich ein eigenes ClassLoader ein.
Die URLClassLoader-Klasse hätte es evtl. auch getan. Aber ein eigener
ClassLoader schadet eigentlich auch nicht, sofern man keine Bugs
reinprogrammiert. :)
- Sortierallgorithmen müssen mein Interface SortModule implementieren
Klingt sinnvoll.
- und erweitern die Klasse Thread.
Könnte man die Start-Methode nicht auch mit in SortModule reinnehmen?
Ob die Klasse nun von Thread ableitet oder nur eine Start-Methode
anbietet, die dann vielleicht an einen Thread delegiert, ist doch
eigentlich egal.
Mein Problem resultiert daraus, dass ich die durch das Constructer-Object von Reflect erstellte Instanz der Sortiermodule nicht in mein Interface SortModule casten kann.
Warum nicht? Das sollte schon gehen.
Dafür ist folgender Code zuständig:
Enumeration en = this.selectedAllgorithms.elements();
Schau dir mal iterator() und Iterator an. Das ist die "modernere"
Methode des Java Collections Framework, das die Enumeration-Geschichte
ablösen sollte. Steht auch so im Javadoc der Enumeration-Klasse.
>
> while(en.hasMoreElements())
> {
[...]
>
> Object argumentsList[] = new Object[2];
> argumentsList[0] = this;
> argumentsList[1] = this.data;
> Thread sm = (Thread)cons.newInstance(argumentsList); /\* hier funktioniert der type cast in SortModule nicht: SortModule sm = (SortModule)cons.newInstance(argumentsList); )\*/
Keine Ahnung, wieso das nicht gehen soll. Es scheint für mich gültiger
Java-Code zu sein. Zumindest solange das zu instanzierende Objekt
tatsächlich das Interface "SortModule" implementiert. (Allerdings
habe ich es jetzt nicht ausprobiert.)
Was passiert, wenn du "sm" nachträglich nach "SortModule" castest?
Wie genau äußert sich das "funktioniert nicht" eigentlich? Welche
Fehlermeldung erscheint?
> Ich habe jedoch keine Möglichkeit gefunden ein Integer Array zu erhalten (das Array, das sortiert werden soll; und von dem ich die Snapschüsse brauche).
Aus der Javadoc-Doku von java.lang.reflect.Method.invoke():
"If the method completes normally, the value it returns is returned
to the caller of invoke; if the value has a primitive type, it is
first appropriately wrapped in an object. However, if the value has
the type of an array of a primitive type, the elements of the array
are not wrapped in objects; in other words, an array of primitive
type is returned."
> Wie kann ich das ganze zeitversetzt visualisieren?
> Ist es möglich, dass sm alle 300 ms irgendwie das Array an die Kontrollerklasse schmeisst (welche es fängt, und daraus ein Bild generiert)?
> oder alle 300ms holt sich die Kontrollerklasse das Array vom sm?
Letzteres würde nach meinem Verständnis mehr Sinn machen. Wieso sollte
die Sortier-Klasse wissen wie oft die GUI aktualisiert werden soll?
Nimm doch eine der Timer-Klassen, um den Zustand der Sortier-Klassen
kontinuierlich abzufragen. Für GUIs am besten javax.swing.Timer.
Gruß
Slyh
PS: Beim Durchlesen kam mir mein Posting etwas mürrisch vor. Falls dem
so sein sollte: Es ist nicht mürrisch. :-)