T
tuxedo
Gast
Hi,
gibts irgend einen Trick per Reflection oder so mit dem ich eine final Methode, obwohl man es nicht können sollte, doch überschreiben kann?
Hintergrund:
Wir haben eine SWT Anwendung die jede Menge Runnables in den UI-Thread steckt um Dinge zu Zeichnen oder zu aktualisieren. Das führt, je nachdem wie der Benutzer die Anwendung konfiguriert, zu einem Overload so dass die Anwendung nicht mehr richtig reagiert, weil der UI Thread einfach zu viel zu tun hat.
Ich hab jetzt die Aufgabe einen Health-Monitor zu bauen der Auskunft darüber gibt "wie gut" es der Anwendung denn gerade geht.
Hab ein wenig geforscht und herausgefunden, dass in org.eclipse.swt.widgets.Synchronizer, eine Liste mit den Runnables (bzw. RunnableLocks) geführt wird. Ich kann Synchronizer zwar überschreiben und dem Display diesen eigenen Synchronizer als standard Synchronizer übergeben, doch hab ich nur 2 final Methoden die ich überschreiben/erweitern kann:
- syncExec()
- asyncExec()
Damit könnte ich selbst einen Zähler inkrementieren den ich von aussen abfragen kann. Aber zum dekrementieren des zählers müsste ich in die Methoden, die direkt von der Displayklasse genutzt werden eingreifen.
Wenn das mit dem "doch überschrieben" nicht geht: Hat jemand ne andere Idee für mich wie ich das generisch lösen kann ohne die bereits bestehenden Runnables so zu modifizieren dass sie mit dem letzten Statement in run() den Zähler dekrementieren?!
Gruß
Alex
P.S. Methodennamen die mit einem blauen dreieck im Eclipse Outline-View gekennzeichnet sind, sind dich final, oder?
gibts irgend einen Trick per Reflection oder so mit dem ich eine final Methode, obwohl man es nicht können sollte, doch überschreiben kann?
Hintergrund:
Wir haben eine SWT Anwendung die jede Menge Runnables in den UI-Thread steckt um Dinge zu Zeichnen oder zu aktualisieren. Das führt, je nachdem wie der Benutzer die Anwendung konfiguriert, zu einem Overload so dass die Anwendung nicht mehr richtig reagiert, weil der UI Thread einfach zu viel zu tun hat.
Ich hab jetzt die Aufgabe einen Health-Monitor zu bauen der Auskunft darüber gibt "wie gut" es der Anwendung denn gerade geht.
Hab ein wenig geforscht und herausgefunden, dass in org.eclipse.swt.widgets.Synchronizer, eine Liste mit den Runnables (bzw. RunnableLocks) geführt wird. Ich kann Synchronizer zwar überschreiben und dem Display diesen eigenen Synchronizer als standard Synchronizer übergeben, doch hab ich nur 2 final Methoden die ich überschreiben/erweitern kann:
- syncExec()
- asyncExec()
Damit könnte ich selbst einen Zähler inkrementieren den ich von aussen abfragen kann. Aber zum dekrementieren des zählers müsste ich in die Methoden, die direkt von der Displayklasse genutzt werden eingreifen.
Wenn das mit dem "doch überschrieben" nicht geht: Hat jemand ne andere Idee für mich wie ich das generisch lösen kann ohne die bereits bestehenden Runnables so zu modifizieren dass sie mit dem letzten Statement in run() den Zähler dekrementieren?!
Gruß
Alex
P.S. Methodennamen die mit einem blauen dreieck im Eclipse Outline-View gekennzeichnet sind, sind dich final, oder?