Slyh: snapshot von einem thread

Beitrag lesen

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. :-)