2015-03-04 8 views

Antwort

1

Wie Sie vielleicht schon erraten haben, wäre es sicherer, Ihre Schaukel Code innerhalb des Ereignis Dispatching Thread ausgeführt aka EDT weil die meisten der Swing-Komponenten sind nicht Thread-sicher. Hier ist, was in Oracle-Dokumentation angegeben:

Swing Ereignisbehandlungscode läuft auf einem speziellen Thread als Ereignis Dispatch-Thread. Der meiste Code, der Swing-Methoden aufruft, läuft auch unter diesem Thread. Dies ist notwendig, da die meisten Swing-Objektmethoden nicht "thread safe" sind: das Aufrufen von Threads aus Threads mit mehreren Threads riskiert Thread Interferenz- oder Speicherkonsistenzfehler.

So sollten Sie sicher sein, zu gehen, wenn Ihr initialiaze Ihre FrühlingApplicationContext whithin das Gewinde EDT, so dass Ihre Komponenten initialisiert, und im selben Thread ausgeführt werden:

SwingUtilities.invokeLater(new Runnable() 
{ 
    public void run() 
    { 
    new ClassPathXmlApplicationContext("your-application-context.xml"); // pay attention to context so that it is not left open 
    } 
}); 
+0

nicht das ist keine gute Idee, EDT Waitng, bis was von ClassPathXmlApplicationContext geladen ist, InvokeLater ist bestimmt, um Methoden in Swing-APIs zu benachrichtigen, Methoden in diesen APIs, – mKorbel

+0

Das kann eine Abkürzung ja sein und nicht ein n ultimative Lösung. – tmarwen