2015-01-09 40 views
0

我有以下結構交錯的paintComponent與以往的方法

JFrame frame = new JFrame("Sample"); 
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
frame.add(new CanvasBoard(tree)); 

frame.setSize(1200, 600); 
frame.setVisible(true); 

我有幾個System.out.printlnmethod1 ... methodn並在CanvasBoardpublic void paintComponent(Graphics g)

我得到的消息交錯,我該如何解決?

+0

確保UI的創建和修改只能從事件指派線程的上下文中。看看[併發中的Swing](http://docs.oracle.com/javase/tutorial/uiswing/concurrency/)和[初始線程](http://docs.oracle.com/javase/tutorial/uiswing /concurrency/initial.html)更多詳細信息 – MadProgrammer

+0

讓我更好地理解:先調用_method1_,然後調用_method2_,然後調用_method3_,直到_methodn_。然後你調用_methodx_。那就對了? –

+0

是的,雖然這些方法是按順序調用的,但方法x消息與來自先前方法的消息交織在一起。 – yonutix

回答

1

搖擺它自己的線程,這是從啓動程序線程不同內運行。

這意味着該組件被繪製在不同的線程中,那麼您的代碼很可能已被運行。

即使您的所有代碼都在Event Dispatching Thread的上下文中運行,也可以隨時調用paintComponent,這意味着消息在每次運行時都會有所不同。

有關更多詳細信息,請參閱Concurrency in SwingInitial Threads

請確保您啓動,並從事件指派線程的上下文中運行你的UI代碼....

1

新增主題資訊提供給您的打印輸出,看看是否有你的代碼在運行多線程

System.out.println(Thread.currentThread() + ": <your log message here>"); 
相關問題