【问题标题】:Java gui not redrawingJava gui不重绘
【发布时间】:2026-01-14 12:20:07
【问题描述】:

我正在尝试制作一个可以直观地逐步完成数组排序的工具。

简而言之,尽管线程和强制重绘我的 GUI 没有更新。我已经阅读了我能找到的所有建议,从线程化和将绘图添加到计时器,到强制重绘,再到进一步分离逻辑和视觉,但行为保持不变。

所有代码都在https://github.com/anadon/Sorting-Visualization

【问题讨论】:

  • 请不要强迫志愿者费力地浏览所有代码。相反,您的工作是首先隔离问题,然后创建并发布一个小而简单的完整程序来说明您的问题,MCVE。请查看链接了解这个非常有用的工具的详细信息。
  • 可能duplicate
  • HFOE:如果我知道去哪里看,我就不会遇到这个问题了。
  • Peeskillet:看起来很接近!在我继续之前让我试一试。
  • 乔希,请不要误解我的帖子。我不是说你没有尝试过,甚至没有接近。我只是说你提出的问题不适合这个网站。我是否必须重申您要求志愿者浏览大量代码?您在问为什么您的代码不起作用,但我们大多数人都无能为力,除非我们能看到合理数量的可编译和可运行代码。

标签: java multithreading swing user-interface


【解决方案1】:

我不会阅读您的整个代码库(@see Hovercraft Full of Eels cmets)。

但是,问题似乎在于您没有尝试在 GUI 线程上进行更新。你需要通过SwingUtilities.invokeLater(thingThatUpdates)重新加入线程

其他一些快速说明,您没有遵循 Java 约定。类名应该是 CamelCase 而不是 lowerCamelCase。基本上,如果您在另一个线程上工作,Swing 不会知道要更新,因为该线程是 "just chillin'" 直到你告诉它画画。

我强烈建议您做一些 SMALL 和 TESTABLE 的事情,以便我们可以帮助您,链接到非标准 GitHub 项目是真的很烦人

(我认为你可能是一名学生,有问题的学生应该得到一些帮助。就像任何事情一样,在你来之前尽量把它清理干净,这个社区将对你无限有用。) em>

【讨论】:

  • 我发现逻辑确实与 SwingUtilities.invokeLater 下的模型耦合。感谢您的耐心等待。