paintComponent与先前方法交错

时间:2015-01-09 10:09:59

标签: java swing awt

我有以下结构:

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 ... method1methodn public void paintComponent(Graphics g)中有多个CanvasBoard

我将消息交错,我该如何解决?

2 个答案:

答案 0 :(得分:1)

在您的打印输出中添加线程信息,以查看代码中是否有多个线程

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

答案 1 :(得分:1)

Swing在其自己的线程中运行,这与启动程序的线程不同。

这意味着该组件已在不同的线程中绘制,因此您可能已运行代码。

即使您所有的代码都在事件调度线程的上下文中运行,也可以随时调用paintComponent,这意味着每次运行时消息传递都会有所不同。

有关详细信息,请参阅Concurrency in SwingInitial Threads

确保从Event Dispatching Thread ....

的上下文中启动并运行UI代码