我发现 paint()
方法在 init()
激活后的某个时间被调用(它不会立即发生,不是吗?),不是在完成之后。我有一些在 init()
中创建并在 paint()
方法中绘制的对象。但绘图是在对象初始化之前开始的。这会导致异常,并会自动处理。但它也会导致第一次激活 paint()
后对象无法绘制 - 它们需要重新绘制才能显示。
我能够以无限循环阻止 paint()
方法的工作,将 int 放置在方法的开头,直到 init()
才会停止完成它的工作(我猜 init()
和 paint()
在单独的线程中运行)。但是一位受雇的 Java 程序员告诉我,这不是一个优雅的解决方案 - 我应该尝试做一些不同的事情(那家伙没有告诉我该怎么做,他不使用小程序,我猜,他从未遇到过这种情况问题,这就是我在这里问的原因)。
如何确保 paint()
方法在 init()
完成工作之前不会激活,以及如何以优雅的方式实现它(在这种情况下这意味着什么......)?
编辑:
我正在使用 Dr. Java - 出于某种原因,它在两台不同的计算机上以不同的方式运行小程序:一台运行 Win XP 的非常旧的笔记本电脑(7 年前的)和一台运行 Win XP 的 2 年前的台式电脑在 Win 7 上运行。我犯了一个错误,没有使用浏览器进行测试...
在桌面上使用Dr. Java进行测试时不会出现该问题。在浏览器上运行小程序时不会出现该问题。仅当笔记本电脑上安装了编辑器时才会出现这种情况。我猜问题出在运行“旧技术”的代码编辑器中,而不是代码中。
最佳答案
简短的回答是你不能。正如您所怀疑的,Init 和 Paint 正在由两个不同的线程调用。
我想到的最优雅的解决方案是
- 检查绘制方法中的空值
- 在 init 方法中使用 EventQueue.invokeLater 并将初始化代码放入其中,完成后调用 repaint
关于Java,小程序 : How to block the activation of paint() before init() finishes it's work,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13710524/