- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
编辑:所以代码实际上工作正常 - 所有对象都按应有的方式进行修改。当该方法仍在运行时,这只是表面似乎存在更新自身的问题......
<小时/>我正在开发一个 atm 项目,该项目基本上是关于解决推箱子谜语。现在,我们已经实现了 GUI 和算法来解决这个谜题,但连接似乎很棘手。例如,在 GUI 中,我选择“解决”,算法解决了谜题(在控制台中可见),但 GUI 不会更改为 InGame View (在调用solve() 之前初始化。如果我这样做//switchToRoboControl() 它将立即显示 InGame!)。 solve() 完成后它将切换到 InGame,这很不方便,因为它应该显示在 map 上移动并解决谜题的图标。
所以我真正的问题是:如何正确同步前端和后端,以便如果后端采取行动并通知前端,前端实际上会显示发生了什么。
此外,如果有人对此有任何想法,为什么 InGame 会在solve() 完成后出现,即使它之前已初始化且 isVisible() 返回 true?
如果有帮助的话,我可以发布代码,但是有数千行,所以我想也许解释问题并获得有助于我解决这个问题的提示就足够了......
谢谢!
public class SokobanGUIManager {
public SokobanGUIManager() {
this.display = new Display();
//initialsiere Shell
this.shell = new Shell(this.display);
shell.setText("Sokobots - The absolute best Sokoban-Solver you've ever seen!");
shell.setSize(735, 460);
//initialisiere Stack-Layout
this.layout = new StackLayout();
shell.setLayout(layout);
shell.layout();
//öffne Main-Menü;
goToMainMenu();
//Starte Fenster
this.shell.open();
//Lebensschleife
while (!this.shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
}
}
public class InGameGUI extends Composite {
...
public void initRoboControl() {
this.roboControl = new RoboControlGUI(this, manager, map, map.twoRobos(), this, this.roboStream); //RoboControlGUI is a child-Composite of InGameGUI
this.roboControl.setLayoutData(new RowData(300, 400));
this.layout();
this.guiCoordinator.setRoboControl(this.roboControl);
this.guiCoordinator.switchToRoboControl();
}
...
}
public class GUICoordinator {
...
protected void switchToRoboControl() {
if(this.roboControl != null) {
this.roboControl.setVisible(true);
System.out.println("RoboControl is visible");
this.roboCoordinator.switchToRoboControl();
} else {
System.out.println("Epic fail");
}
}
...
}
public class RoboCoordinator {
public void switchToRoboControl() { //TODO
this.gui.addToStreamEnd("switched to automatic control");
this.gui.deleteFirstLine();
this.gui.addToStreamEnd("the robots are calculating a solution. please wait");
try{ Thread.sleep(5000); } catch(Exception e) {}
this.map.setSolution(new Solution("1u:1l:1r:1d"));
this.gui.deleteFirstLine();
this.gui.deleteFirstLine();
this.gui.addToStreamEnd("robot 1 in direction u");
this.gui.addToStreamEnd("robot 1 in direction l");
this.gui.addToStreamEnd("robot 1 in direction r");
this.gui.addToStreamEnd("robot 1 in direction d");
try{ Thread.sleep(2000); } catch (Exception e) {}
this.map.moveRobo(1, 'u');
this.gui.updateMoves();
this.gui.updateSurface();
this.gui.deleteFirstLine();
System.out.println(this.map.toString());
System.out.println("Erster Zug fertig!");
try{ Thread.sleep(2000); } catch (Exception e) {}
this.map.moveRobo(1, 'l');
this.gui.updateMoves();
this.gui.updateSurface();
this.gui.deleteFirstLine();
System.out.println(this.map.toString());
System.out.println("Zweiter Zug fertig!");
try{ Thread.sleep(2000); } catch (Exception e) {}
this.map.moveRobo(1, 'r');
this.gui.updateMoves();
this.gui.updateSurface();
this.gui.deleteFirstLine();
System.out.println(this.map.toString());
try{ Thread.sleep(2000); } catch (Exception e) {}
this.map.moveRobo(1, 'd');
this.gui.updateMoves();
this.gui.updateSurface();
this.gui.deleteFirstLine();
System.out.println(this.map.toString());
}
}
(最后一部分是集成测试的模拟,稍后将被真正的方法调用(如“getSolution()”等)取代......这就是解决方案在代码中实现的原因。)
最佳答案
嗯,据我所知,你的问题是计算逻辑与 GUI 在同一线程中运行。这会导致计算期间没有更新。您需要将计算放在后台线程中。另外,您的 Thread.sleep() 将导致 GUI 不执行任何操作。
因此,请输入您的计算结果,例如在可运行中。
Runnable runnable = new Runnable(Display display) {
... some methods ...
@Override run() {
... your logic ...
display.asyncExec(new Runnable() {
run() {
// update your gui here
});
... some more logic ...
};
Display.asyncExec 会将您的更改转发到 gui 并立即返回到调用方法。当显示线程有时间时,UI 将被更新。
关于java - 在 Java(和 SWT)中同步 "Frontend"和 "Backend",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24840762/
关闭。这个问题需要details or clarity .它目前不接受答案。 想改善这个问题吗?通过 editing this post 添加详细信息并澄清问题. 8年前关闭。 Improve thi
当我使用docker-compose up命令在docker上安装超集时。 它达到状态13/37并显示以下错误。 步骤13/37:运行/frontend-mem-nag.sh && cd / app
我在浏览器控制台中遇到此错误: 未捕获错误:无法从“frontend/js/app.js”中找到模块“frontend/js/components/Hello” 当遵循 vue example 时在早
我当前的设置中有2个HAProxies配置有keepalived以实现高可用性,这2个代理充当虚拟Web服务的反向代理和负载平衡器。我知道HAProxy可以检查其后端的运行状况(我已经配置了此功能),
Semantic versioning带来以下方法: 进行不兼容的 API 更改时的主要版本 以向后兼容的方式添加功能时的次要版本 当您进行向后兼容的错误修复时的 PATCH 版本 但是前端项目没有A
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
因此,在网站上,例如,当您的声誉增加等事情发生时,页面的堆栈溢出部分会更新。他们是怎么做到的?脚本会不时检查还是以某种方式推送通知? 最佳答案 大约 2 年前,stackexchange 开始使用网络
我正在学习网络技术和编程语言。开始学习框架和其他东西。查看 Bootstrap 前端框架。关于这件事我不了解的一些细节。 在官方网页上说您可以下载已编译的 Bootstrap 源代码。不明白,前端开发
关闭。这个问题需要更多 focused .它目前不接受答案。 想改进这个问题?更新问题,使其仅关注一个问题 editing this post . 3年前关闭。 Improve this questi
为了扩展 TWX 应用程序,必须遵循哪些架构和应用程序开发最佳实践? 大多数应用程序一开始只使用很少的设备,但随着时间的推移,它们很快就会扩展到数千个设备。一旦一个 TWX 实例的流量过多,应采取什么
这里的任何人都知道在 Trello 网站上使用哪种技术或框架或任何东西来呈现漂亮的 GUI? 我对前端技术有点过时了。 最佳答案 以下是 Fog Creek(创建者)对 Trello 技术堆栈的精彩描
我有 Angular 6 微前端应用程序。它在主应用程序中有 4 个不同的应用程序。我如何在这些应用程序之间实现路由。我如何在主应用程序(我在主应用程序中有很多子路由)和子应用程序中实现路由。我正在使
我想就基于前端/后端架构实现 SSO 登录的推荐或标准方法寻求建议。 目前,我需要实现第 3 方 SSO 登录。流程如下: 用户在我的网站点击“第三方登录” 路由到用于 SSO 登录的第 3 方界面。
可能这种模式听起来很老,但是我们如何实现一个我们想要有一个后端(数据库)、一个业务逻辑层和多个前端的场景?桌面、网络和移动设备? 诸如现代应用程序之类的东西 - gmail、facebook、ever
color: red; Some html content! 此代码不起作用。在 Angular 框架中,可以通过使用 :host 来完成。选择器。 :global在我的情况下无济于事,因为我
我正在开发一个需要使用 amazon lex 作为聊天机器人的项目。我能够在命令行上将凭证发送到 amazon lex,但是,当我将其部署到我的应用程序时遇到问题。我使用亚马逊 cloudFormat
我正在为我们的运算符(operator)寻找一个前端来运行我们的 Talend 作业。我们不希望他有删除或修改作业的能力。只是为了运行它们并监控它们的结果。对于执行此操作的工具有什么建议吗? 谢谢 最
如何在同一应用程序中分离后端和前端( Controller 、 View 、布局)以共享 CakePHP 3 中的模型? 最佳答案 如果您在终端中使用bin/cake bake,您可以添加--pref
我有一个固定宽度居中的 div,其中有一个固定的无重复背景图像,背景图像需要偏离中心。但是,当调整窗口大小时,无论图像是使用百分比坐标还是像素坐标固定的,它都不会在 div 中保持正确的位置。 有没有
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 9 年前。 Improve t
我是一名优秀的程序员,十分优秀!