我有以下结构:
method1
method2
...
methodn
methodX
方法x包含:
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.println
... method1
和methodn
public void paintComponent(Graphics g)
中有多个CanvasBoard
。
我将消息交错,我该如何解决?
答案 0 :(得分:1)
在您的打印输出中添加线程信息,以查看代码中是否有多个线程
System.out.println(Thread.currentThread() + ": <your log message here>");
答案 1 :(得分:1)
Swing在其自己的线程中运行,这与启动程序的线程不同。
这意味着该组件已在不同的线程中绘制,因此您可能已运行代码。
即使您所有的代码都在事件调度线程的上下文中运行,也可以随时调用paintComponent
,这意味着每次运行时消息传递都会有所不同。
有关详细信息,请参阅Concurrency in Swing和Initial Threads。
确保从Event Dispatching Thread ....
的上下文中启动并运行UI代码