Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.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组件告诉是否再次调用_Java_Swing_Paintcomponent - Fatal编程技术网

Java组件告诉是否再次调用

Java组件告诉是否再次调用,java,swing,paintcomponent,Java,Swing,Paintcomponent,在谷歌上搜索了几天,我不知道如何判断在处理paintComponent时是否调用了paintComponent。这个过程漫长而复杂。如果我有第二个(或第三个)绘画请求,我想中止当前的绘画过程,并以最近的请求重新开始。您不能;对paintComponent()的调用将排队,直到完成为止都会阻塞。使用本文中所示的方法在典型的目标平台上自计时您的实现。根据需要进行优化。作为一个具体的例子,这说明了几种可能应用于您的用例的动画技术 附录:您的更新表明“漫长而复杂”的过程涉及构建一个buffereImag

在谷歌上搜索了几天,我不知道如何判断在处理paintComponent时是否调用了paintComponent。这个过程漫长而复杂。如果我有第二个(或第三个)绘画请求,我想中止当前的绘画过程,并以最近的请求重新开始。

您不能;对
paintComponent()
的调用将排队,直到完成为止都会阻塞。使用本文中所示的方法在典型的目标平台上自计时您的实现。根据需要进行优化。作为一个具体的例子,这说明了几种可能应用于您的用例的动画技术

附录:您的更新表明“漫长而复杂”的过程涉及构建一个
buffereImage
,以便以后显示。为了避免阻塞EDT,请在后台执行此操作,您可以在临时结果可用时从中
publish()
发布临时结果。这将模拟一次生成一行光栅图像

此相关函数以类似的方式构造
TexturePaint


为了获得具体的指导,请编辑您的问题,以包含一个显示您修改方法的答案。

像往常一样,我在询问一个答案后会想到一个解决方案。。。我的解决方案是启动一个线程,逐步更新BuffereImage。然后,paintComponent方法只有两行:

protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    g.drawImage(myImage, 0, 0, null);
}
图像绘制得非常快。在重新绘制图像之前,需要调用super来删除图像的现有视图


解决方案的其余部分是创建一个线程来更新面板的myImage属性。在我的工作中,图像完全处理大约需要30分钟,这取决于程序的输入。除非我在应用程序运行时拖动窗口或不小心触碰鼠标滚轮,否则这并不是什么大事。然后,再次调用paintComponent并挂起程序。使用此解决方案,更新可能需要几天时间,您可以根据需要调整窗口大小或移动窗口。到目前为止,您一直可以看到经过处理的图像。

“.paintComponent。该过程漫长而复杂。”这是需要解决的问题。不应在paint方法中执行或调用“长时间运行的任务”。@AndrewThompson“不应在paint方法中执行或调用“长时间运行的任务”。“您的意思是Java无法处理长时间运行的可视化算法。”。我认为您的意思是说,长期运行的可视化算法应该作为一个单独的线程启动,以快速关闭绘制方法。尽量提供更多信息,不要那么刺耳。你可以通过两个缓冲图像来解决鼠标滚轮碰撞的问题。paintComponent方法绘制MyolImage。在myImage完成渲染之前,MylImage不会更新。我很好奇为什么你的图像需要30分钟左右的时间来渲染。也许你可以先做计算,然后在我的图像上画图。我不确定这是否是问题的答案。这肯定会导致你遇到的那种问题。请编辑您的问题以反映您的用例。我更新了我的答案,引用了两个相关的例子。