Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果我想阻止长任务,为什么不在EDT上运行它们呢_Java - Fatal编程技术网

Java 如果我想阻止长任务,为什么不在EDT上运行它们呢

Java 如果我想阻止长任务,为什么不在EDT上运行它们呢,java,Java,我知道在Java中有一些类,比如Swing worker,用于处理需要很长时间的事情,这样EDT事件调度线程就不会被阻塞。但为什么不呢 我有一个应用程序,每个用户的动作都应该是阻塞动作。那么在这种情况下,有没有理由不在EDT线程上运行 比如说。如果用户单击加载和处理电子表格的项目。然后我不希望用户在处理完成之前进入下一步。我不应该在EDT上这样做以确保事件的顺序 我遗漏了什么?问题是,阻止EDT也会阻止任何UI更新,因此您的UI可能看起来没有响应。在这种情况下,您通常会使用一个模式对话框,使UI

我知道在Java中有一些类,比如Swing worker,用于处理需要很长时间的事情,这样EDT事件调度线程就不会被阻塞。但为什么不呢

我有一个应用程序,每个用户的动作都应该是阻塞动作。那么在这种情况下,有没有理由不在EDT线程上运行

比如说。如果用户单击加载和处理电子表格的项目。然后我不希望用户在处理完成之前进入下一步。我不应该在EDT上这样做以确保事件的顺序


我遗漏了什么?

问题是,阻止EDT也会阻止任何UI更新,因此您的UI可能看起来没有响应。在这种情况下,您通常会使用一个模式对话框,使UI仅在流程完成后接受进一步的用户输入。例如,这样做将允许您显示一些不确定的进度条,即工作动画,即用户不会感觉应用程序不再响应


除了模式对话框之外,还有其他选项,例如使用玻璃窗格等,请看这里的示例:

问题是阻止EDT也会阻止任何UI更新,因此您的UI可能看起来没有响应。在这种情况下,您通常会使用一个模式对话框,使UI仅在流程完成后接受进一步的用户输入。例如,这样做将允许您显示一些不确定的进度条,即工作动画,即用户不会感觉应用程序不再响应


除了模式对话框之外,还有其他选项,例如使用玻璃窗格等,请看下面的示例:

让用户界面能够满足用户操作是一种良好的做法。在您的情况下,对于长任务,通常会添加“取消”按钮,以便用户在认为必要时可以取消操作

你可以在EDT上做任何事情,但我建议你不要这样做。有些人倾向于认为完全不响应的UI是应用程序死亡的标志。
在我看来,使用某种类型的UI组件向用户显示正在进行的冗长操作是一种可行的方法。

让UI能够满足用户操作是一种良好的做法。在您的情况下,对于长任务,通常会添加“取消”按钮,以便用户在认为必要时可以取消操作

你可以在EDT上做任何事情,但我建议你不要这样做。有些人倾向于认为完全不响应的UI是应用程序死亡的标志。
在我看来,让某种类型的UI组件向用户显示正在进行的冗长操作是一条可行之路。

您将完全违背Java GUI应用程序的基本/常见设计思想

例如,如果你想让你的用户等待,你可以设置模式窗口,这样就不允许他点击任何其他地方的按钮。这样做。。。仍然允许更新GUI中的其他元素,例如,如果您在某处有一些状态栏

换言之:是的,在EDT上做任何事情都很容易,而且它可能很吸引人,因为它的设计很简单;但很有可能,在某个时候,您会对java标准/最佳实践的这种偏差感到遗憾。如果那样的话。。。那么你的处境将需要大量的改变才能摆脱困境

最后,永远不要忘记wtf代码质量度量;并接受以这种方式误用EDT将保证你在评论中有很多WTF


您将与Java GUI应用程序的非常基本/常见的设计思想相矛盾

例如,如果你想让你的用户等待,你可以设置模式窗口,这样就不允许他点击任何其他地方的按钮。这样做。。。仍然允许更新GUI中的其他元素,例如,如果您在某处有一些状态栏

换言之:是的,在EDT上做任何事情都很容易,而且它可能很吸引人,因为它的设计很简单;但很有可能,在某个时候,您会对java标准/最佳实践的这种偏差感到遗憾。如果那样的话。。。那么你的处境将需要大量的改变才能摆脱困境

最后,永远不要忘记wtf代码质量度量;并接受以这种方式误用EDT将保证你在评论中有很多WTF


特别是:如果用户拖动窗口,它可能无法正确重新绘制。@user268396是的,这是无响应EDT可能发生的最糟糕的情况之一。谢谢你的建议,很有趣的一点。特别是+1:如果用户拖动窗口,它很可能无法正确重新绘制。@user268396是的,这是可能发生的最糟糕的事情之一
没有反应的EDT。谢谢你的建议,很有趣的一个。谢谢你。我喜欢WTF的图形。我面临的问题是,如果我显示一个模式对话框,那么它不会让我实际开始运行任务,因为它会阻止所有内容。如果运行任务,然后显示模式窗口,则不会执行任何点作为任务。不确定如何保持最佳实践虽然通常是一个很好的行动方针,但我主张尝试理解它们背后的原因,特别是在你试图偏离的情况下。这样你就能做出更好的决定,如果你偏离了最佳实践,你很可能会有很好的理由。因此,我认为OP的问题实际上是一个相当好的问题。除此之外,你肯定会获得+1,尤其是WTF指标@我看见蛇了。我认为这可能值得提出一个新的问题——明确指出你想要解决的潜在问题。@Thomas你说得很对;也许Snake会跟进,并提出另一个问题让我们达到目的。我按照建议提出了一个新问题。非常感谢。我喜欢WTF的图形。我面临的问题是,如果我显示一个模式对话框,那么它不会让我实际开始运行任务,因为它会阻止所有内容。如果运行任务,然后显示模式窗口,则不会执行任何点作为任务。不确定如何保持最佳实践虽然通常是一个很好的行动方针,但我主张尝试理解它们背后的原因,特别是在你试图偏离的情况下。这样你就能做出更好的决定,如果你偏离了最佳实践,你很可能会有很好的理由。因此,我认为OP的问题实际上是一个相当好的问题。除此之外,你肯定会获得+1,尤其是WTF指标@我看见蛇了。我认为这可能值得提出一个新的问题——明确指出你想要解决的潜在问题。@Thomas你说得很对;也许Snake会跟进,并提出另一个问题让我们达到目的。我按照建议提出了一个新问题。谢谢你的评论。关于取消的观点很好,但在我的例子中,没有取消数据库更新的选项,也没有查询评论的选项。关于取消的观点很好,但在我的例子中,没有取消数据库更新和查询的选项