Java,小程序 : How to block the activation of paint() before init() finishes it's work

标签 java methods applet

我发现 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 正在由两个不同的线程调用。

我想到的最优雅的解决方案是

  1. 检查绘制方法中的空值
  2. 在 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/

相关文章:

java - DSE : Unable to sstablellaoding data from 4. 8.9 至 5.0.2

Java - 使用最小大小和分隔符拆分标记的正则表达式

c++ - C++中的方法和成员有什么区别?

java - 使用 JNLP 部署 Applet

java - AudioClip无法播放,文件路径不正确?

java-将元素添加到现有 XML 的列表中

java - 改进 Java 代码,使其在 Android 上执行得更快

java - java中为什么函数被称为方法?

scala - 在 Scala 中将运算符定义为方法别名的最短表示法是什么?

java - jre 7u45 访问本地文件系统