CarefulRepaintManager
/**
* RepaintManager sprawdzający, czy wątek mający dostęp do obiektów Swing, jest
* do tego uprawniony.
*
* @author Tomasz Wasilczyk (www.wasilczyk.pl)
*/
class CarefulRepaintManager extends RepaintManager
{
protected final boolean crashOnErrors;
/**
* Główny konstruktor.
*
* @param crashOnErrors czy w przypadku modyfikacji obiektu Swing z
* nieuprawnionego wątku, wywołać wyjątek
*/
public CarefulRepaintManager(boolean crashOnErrors)
{
this.crashOnErrors = crashOnErrors;
}
/**
* Sprawdzenie, czy bieżący wątek jest uprawniony do modyfikowania obiektów
* swing.
*/
protected void doThreadCheck()
{
if (SwingUtilities.isEventDispatchThread())
return;
if (Thread.currentThread().getName().startsWith("Image Fetcher "))
return;
if (crashOnErrors)
throw new RuntimeException("Nie wywołano z EventDispatchThread, ale z: " +
Thread.currentThread().getName());
else
{
System.err.println("Nie wywołano z EventDispatchThread, ale z: " +
Thread.currentThread().getName());
Thread.dumpStack();
}
}
@Override public synchronized void addInvalidComponent(JComponent jComponent)
{
doThreadCheck();
super.addInvalidComponent(jComponent);
}
@Override public void addDirtyRegion(JComponent c, int x, int y, int w, int h)
{
doThreadCheck();
super.addDirtyRegion(c, x, y, w, h);
}
@Override public void addDirtyRegion(Applet applet, int x, int y, int w, int h)
{
doThreadCheck();
super.addDirtyRegion(applet, x, y, w, h);
}
@Override public void addDirtyRegion(Window window, int x, int y, int w, int h)
{
doThreadCheck();
super.addDirtyRegion(window, x, y, w, h);
}
} instalacja:
RepaintManager.setCurrentManager(new CarefulRepaintManager(true))
Dodaj komentarz
Ta strona powstała 03.11.2010. Ostatnia edycja 03.11.2010. Wizyt: 408.

