- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经编写了一个用于操作读卡器的 GUI - 主要由一个 ADD 按钮组成,该按钮调出一个 FileChooser
对话框并将所选的 File
排队到一个 CardHopper 上,它在视觉上显示为 JList
。
现在我想让 CPU(另一个 JFrame
,在另一个线程上)能够向读卡器发出请求;例如读一张卡片寄给我。在读卡器有 GUI 之前,它只是一个与 CPU 在同一线程上运行的模型,所以我可以调用它的 readCard()
方法。现在它在一个单独的线程上,似乎正确的通信方式是消息传递。
我正准备使用 PriorityBlockingQueue
实现一些功能,CPU 将放入
读卡命令到队列中,CardReader 将接受
code> 并执行命令,直到我意识到 CardReader 线程通常会在其 NetBeans 提供的 Swing 代码中的某处被阻塞,等待 GUI 事件并且对我的事件队列中任何内容的到来视而不见。此外,这个“后端”请求会改变数据模型 - 所以即使我可以以某种方式在模型中执行一些代码,“触发”通知到 GUI 的 ListDataListeners 是否合乎规范?
当 GUI 正在等待 GUI 事件时?
我希望这不是太神秘 - 我仍在努力了解 GUI 和线程的机制。
最佳答案
Would it be kosher to "fire" notifications to the GUI's ListDataListeners while the GUI is waiting for GUI events?
绝对不是。
您要做的是在 Swing 事件线程上执行直接操作 UI 模型(或调用 UI 函数)的所有任务。
基本上,当您准备好发布将执行某些 UI 任务的事件时,请执行以下操作:
SwingUtilities.invokeLater(new Runnable() {
public void run() {
...
}
}
您可以触发所有监听器,并在那里对您的 ListModel(或其他 UI 模型)执行任何您想做的事情,因为它只会在 Swing 线程中运行。
否则,当 Swing 正在绘制并且您正在更新数据时,您可能会冒着 Swing 尝试读取您的数据的风险。您将开始获取 NullPointerException、ArrayIndexOutOfBoundExceptions、ConcurrentModifictionException 等。
理想情况下,您将在单独的线程(或在 SwingWorker 下)执行所有后台工作,然后在一切准备就绪后,通过 invokeLater 推送更新。
关于java - 如何设计也响应后端事件的 Java Swing 模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6738905/
我有一个使用 css 列的下拉菜单,当我使用 jquery slide() 时,它会调整下拉框的大小,并重排内容直到达到完整高度。 这是一个工作示例 https://codepen.io/peterg
我有一个带有嵌套 ScrollViewer 的 Expander,如下所示: 代码(简化版)
我想在所有 ajax 调用之后调用一些 javascript 函数。我知道如何调用每个单独的 ajax 调用中的函数,如下所示: function xyz() { if (window.XMLHttp
我想将值从应用程序端传递到 api。在此 api 调用中传递图像、名字、电子邮件、电话和位置。在 Debug模式下,检查值不会被传递。 代码下方 File file = null;
我正在尝试在使用reportlab生成的pdf中的表格后插入分页符,我正在使用以下函数生成pdf: def render_to_pdf(template_src, context_dict): t
CBPeripheralManager 是否有推荐的方法来终止连接。到目前为止我发现的最好的方法就是干脆不响应动态值,然后 BLE 堆栈似乎关闭了连接,但这似乎很粗糙。 一定有更好的方法吗? 最佳答案
我的 API 的 REST 端位于以下地址:http://test.jll.aplikacje-dedykowane.pl/rest/warehouse/all 。现在,我尝试返回在此页面准备的 JS
我有以下 CPP 代码。我想做的是,当我的 native 端发生错误时,我会通知 Java 该错误。我用了How can I catch SIGSEGV (segmentation fault) an
限制对象的方法之一是像这样给函数添加限制 def ten_objects(): obj = Model.objects.all()[0:10] # limit to 10 retur
我目前在电信公司实习,这是一个专业,也是本科生。我有很多选择。据我所知,我知道独立应用程序端的 c、c++、c#、java 语言,在移动端我尝试进入 android 世界,也知道 php、mysql、
我想让我的边框底部看起来像这样: 有一个 flex 的末端。目前它看起来像这样: 我尝试使用的 CSS 是 border-bottom-right-radius: 10px;。代码如下所示:
我有一个 Flutter 项目,突然间,据我所知,我没有做任何特别的事情..Android 端开始显示错误,我完全迷路了,我完全不知道哪里出了问题,也不知道为什么会这样。 这就是我打开 android
我有一个自定义对象列表 (List) 。我需要将此数据发送到 React Native 端以显示在平面列表中。我该怎么做?这个列表出现在 类 NativeToReact(reactContext:Re
我有这个代码: #if defined(NOT_STANDALONE) JNIEXPORT void JNICALL sumTraces (JNIEnv* env, jclass caller,
我有一个定义一对多模型关系的 Django 应用程序。模型如下所示: from django.db import models # Create your models here. class Str
我有以下代码,它根据 IFrame 内容的大小调整 IFrame 的大小: function setIframeHeight(id) {
如何创建自定义过滤器 angularjs javascript Controller 端?我想通过 SegmentId 在名为段的数组中搜索,以创建过滤器,该过滤器通过 SegmentId 在段数组搜
我的代码在 netbeans 8.0.2 中我几乎尝试了所有方法,但没有结果。请帮助我。如何在 netbeans 中显示它? 最佳答案 您只需单击源包(源文件),它就会显示您的项目文件。 关于java
我想这是纯 C++ 问题和 OpenGL 问题之间的一种交叉。我有一个统一的缓冲区,并在其中分配 sizeof(ShaderData) 字节的空间。我在着色器的 GPU 端使用 std140 布局。
我对 Hadoop 中 reduce 端的文件合并过程的理解有问题,因为它在“Hadoop:权威指南”(Tom White)中有所描述。引用它: When all the map outputs ha
我是一名优秀的程序员,十分优秀!