# Programm hängt manchmal



## winterwanderer (12. Feb 2009)

Hallo ich habe ein Programm erstellt, dass einen geometrischen Algorithmus visualisiert und es klappt auch zumeist sehr gut.
Manchmal allerdings, wenn ich ein Objekt zu oft verschiebe, hängt das Programm und reagiert nicht mehr auf Mouseclicks. Es kommt allerdings keine Fehlermeldung und so weiß ich nicht, wo ich den Fehler suchen soll.
Wenn ich nun nach einem solchen Hänger meine Bildschirmgröße leicht verändere, läuft das Programm wieder einwandfrei weiter. Meine Idee ist, dass ich diese leichte Bildschirmgrößenänderung automatisiere, also eine Methode in der Art

```
if (programm hängt)
     verändere einmal kurz die Bildschirmgröße
```
Meine Fage ist, wie kann ich dem Programm automatisch mitteilen, dass es hängt?


----------



## Steev (12. Feb 2009)

> Meine Fage ist, wie kann ich dem Programm automatisch mitteilen, dass es hängt?



Dazu müsste ich etwas mehr über dein Programm wissen, aber dein Problem hört sich so an, als ob man es mit einer besseren Aufteilung von bestimmten Aufgaben, wie zum Beispiel der Translation von Objekte o. Ä. in separater Threads lösen könnte. Solche Probleme treten meist auf, wenn du einen vorangigen Thread eine bestimmte Aufgabe bewältigen lässt, ohne dabei kurze Pausen zu verwenden, damit andere Threads, wie zum Beispiel die Benutzereingabe, auch etwas Rechenzeit abbekommen.

EDIT:

Ich würde einmal genau das Neuzeichnen deiner Komponten untersuchen, nach einem verändern der Größe des Fensters wird ja automatisch ein repaint ausgeführt.


----------



## 0x7F800000 (12. Feb 2009)

winterwanderer hat gesagt.:
			
		

> Wenn ich nun nach einem solchen Hänger meine Bildschirmgröße leicht verändere, läuft das Programm wieder einwandfrei weiter. Meine Idee ist, dass ich diese leichte Bildschirmgrößenänderung automatisiere


Aha... Auf System Mensch übertragen wäre das sowas wie Selbstverstümmelung gegen die Stimmen im Kopf^^ :shock: :autsch:

Statt ein Problem zu lösen willst du da ein zweites dranbauen, um das erste zu verschleiern... :roll: Das ist das schlimmste, was man einem Programm antun kann. :bloed:


Nimm den Debugger, baue da einen Logger rein, oder mach einfach an paar Stellen einfache Ausgaben mit dem stinknormalen System.out.println(), das ist manchmal auch sehr aufschlussreich. Wo soll es denn schon großartig hängen, gug dir halt die schleifen an, die potentiell unendlich laufen könnten. Vielleicht hast du da auch irgendwo einen Deadlock eingebaut? ???:L 

Aber das mit dem sinnfreien automatischen resize lässt du bitte sein, okay?^^


----------



## Steev (12. Feb 2009)

> Statt ein Problem zu lösen willst du da ein zweites dranbauen, um das erste zu verschleiern...
> Das ist das schlimmste, was man einem Programm antun kann.



Genau meine Meinung  :wink: 
Aber woher soll man das wissen? Jeder hat mal angefangen, oder?

Aber im Ernst: Ich denke das du da ein Problem mit deinen Threads hast, ein Deathlock währe möglich es kann aber auch durchaus sein, dass es mit yield oder sleep getan ist.

Probier es einfach mal aus, wenn du noch Fragen hast dann poste doch bitte etwas Code, damit wir wissen, wie wir helfen können.


----------



## Steev (12. Feb 2009)

(Bitte löschen, irgendwie kam der Beitrag zwei mal)


----------



## winterwanderer (12. Feb 2009)

> Auf System Mensch übertragen wäre das sowas wie Selbstverstümmelung gegen die Stimmen im Kopf^^


Is immerhin gut biblisch:
Auszug aus der Bergpredigt: Wenn dich dein rechtes Auge zum Bösen verführt, dann reiß es aus und wirf es weg! :wink: 

Aber ist schon ok, ich seh ein, dass es nicht so ganz die rechte Art ist und werde es auch unterlassen.
Den Hinweis mit dem Extra-Thread war gut, den hab ich schon umgesetzt. Das Problem ist allerdings immer noch nicht ganz aus der Welt. Hab aber mitlerweile schon eine Ahnung, wo es klemmt und werd es schon noch aus der Welt schaffen können.


----------

