【发布时间】:2021-10-24 04:46:52
【问题描述】:
我正在使用 Kotlin 和 Java Swing 编写路径查找器可视化工具,并且我有这个广度优先搜索功能:
fun bfs(): MutableList<Node>? {
Grid.resetNodes()
val queue: Queue<Node> = LinkedList()
queue.add(Grid.start!!)
Grid.start!!.state = State.IN_QUEUE
while (queue.isNotEmpty()) {
val current = queue.poll()
//println(current)
current.state = State.CLOSE
if (current == Grid.end!!) break
Grid.getNodeNeighbours(current).forEach { node ->
if (node.state == State.OPEN) {
node.parent = current
queue.add(node)
node.state = State.IN_QUEUE
}
}
GridPanel.repaint()
}
return getPath()
}
在 while 循环的每次迭代之后,我想重新绘制 Grid 并等待几秒钟以使算法视图变慢一点。 我尝试使用 Swing Timers,但我无法让它工作。由于 Java Swing,我也不能使用 'Thread.sleep()'。
【问题讨论】:
-
使用协程并插入延迟?
-
您不能只将算法插入到 Java Swing 应用程序中。您必须重写算法,以便一次处理的一个步骤发生在 javax.swing.Timer ActionListener 中。
-
另一个example
标签: java swing kotlin sleep breadth-first-search