我目前正在使用简单的GUI制作这个基于文本的RPG游戏.我很高兴找到了良好的开端,但随后有一些我偶然发现的东西使我停止编码一段时间.
如果您在控制台中进行此操作,则可以轻松地使用此代码暂停字符的移动一段时间,例如:
System.out.println("[enemy]");
Thread.sleep(1000);
System.out.println("The local guard waves his sword and tries to stab you in the back, but you quickly parried and tried for a counterattack but you failed.");
Run Code Online (Sandbox Code Playgroud)
如果你这样做JTextArea,你会使用setText但是如果你使用Thread.sleep它不起作用并setText再次编码,将删除旧文本并用新文本替换它,所以战斗的记录将不会完全显示在游戏.有没有办法来解决这个问题?
您可以使用appendappend而不是replace.这是容易的部分.
困难的部分:你必须改变你的程序流程.在Swing中,存在一个用于调度GUI事件的线程,即事件调度线程.您不应该在其中设置EDT sleep或执行任何其他长时间运行的操作.这将冻结GUI,它无法响应任何内容,也不会重新绘制.
相反,您应该为逻辑流启动一个新线程,并且必须在EDT上执行调度操作(操作GUI的所有操作),SwingUtilities.invokeLater或者在这种情况下可能更好SwingUtilities.invokeAndWait.
或者您应该接受事件驱动的控制流程,例如,您可以使用a Timer稍后输出第二个文本.
对于多线程GUI应用程序而言,适用于单线程控制台程序的程序流程并不是正确的方法(并且每个GUI应用程序都是自动多线程的).
| 归档时间: |
|
| 查看次数: |
1360 次 |
| 最近记录: |