- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
按照以下步骤加载一次图像(代码见帖子末尾):
调整大小将“立即”完成,之后需要一两秒才能实际显示图像(可能是因为我的计算机速度较慢)。如果我花一段时间(正确的)而不让他等待一段时间,他会疯狂地加载,并且可能永远不会花时间显示任何东西(在所有计算机上,不仅仅是我的)。所以我想让他等一下。网络摄像头上没有发生太多事情,因此每 10 秒可能是一个不错的间隔。
我的问题分为两部分:
如何以智能方式让循环等待?在它自己的线程内?只是放一个Thread.wait(10000);
循环底部的 也会停止显示图片。
如何检查图片是否显示,而不是像 MediaTracker 那样加载?
我知道我实际上问的不是如何解决问题,而是如何实现解决方案,这可能一开始就是错误的。对于这种情况,我也添加了上下文:我想显示来自网络摄像头的图像,我可以通过 URL 作为 JPG 获取该图像,该图像将以未知的时间间隔在服务器上重写。这种与网络摄像头的连接可能是聪明的,也可能是愚蠢的,但我无论如何都无法改变它。不是我的服务器。我只是想写一个客户端来显示图片。
供引用和大正义的代码(在actionPerformed()内):
...
// now use an URI even if Toolkit.getImage() uses URL, as
// recommended here:
// http://download.oracle.com/javase/6/docs/api/java/net/URL.html
URI adress = null;
try {
adress = new URI("http://194.95.48.67/record/current.jpg");
} catch (URISyntaxException e1) {
throw new Error(e1);
}
displaystate = STATE_LOADING;
repaint();
System.out.println("load image from: " + adress);
try {
image = getToolkit().getImage(adress.toURL());
} catch (MalformedURLException e1) {
throw new Error(e1);
}
MediaTracker mt = new MediaTracker(this);
mt.addImage(image, 0);
try {
mt.waitForAll();
} catch (InterruptedException e) {
// nothing
}
filename = adress.toString();
imagesize.width = image.getWidth(null);
imagesize.height = image.getHeight(null);
if (imagesize.width == -1 || imagesize.height == -1) {
displaystate = STATE_LOADERROR;
} else {
viewport.x = 0;
viewport.y = 0;
viewport.width = imagesize.width;
viewport.height = imagesize.height;
setSize(viewport.width, viewport.height);
displaystate = STATE_DISPLAYING;
}
最佳答案
如果您调用Thread.sleep
,当前线程同时无法执行任何操作。因此,如果您从主线程执行此操作(正如我假设的那样,当您询问是否应该使用第二个线程时),GUI 无法更新,因此无法重新绘制图像。这就是为什么如果您将 sleep 放在循环末尾,它就会挂起。
第二件事是repaint
不会立即重新绘制。它只是在 AWT 事件循环中发布一个事件,该事件最终将被处理,然后组件才会被重新绘制。
最简单的方法是这样的:
创建第二个线程来加载图像,然后将其存储在成员变量中。之后它调用repaint
,然后 hibernate 。
在绘制方法中,您获取图像并将其绘制在屏幕上。这将发生在主 GUI 线程中,因此其他线程的 sleep 不会造成损害。
关于java - Java 中的 AWT 为 "Reload Image 10 sec after successful loading",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5407082/
AWT-EventQueue 线程和 AWT-Shutdown 线程没有在我们的应用程序中关闭。有没有一种调试技术可以找出它们不存在的原因?有什么特别的东西要寻找吗? 最佳答案 如果你的意思是关闭所有
java.awt.* 和 java.awt.event.* 有什么区别? 最佳答案 这只是两个不同的包。 当您说import java.awt.*时,它仅导入那些完全属于java.awt包的类,而不是
我正在将 aadhar 集成到 liferay 中。我尝试了这个链接 https://developer.uidai.gov.in/site/book/export/html/18 所以我想将其集成到
我想知道如何确定 Java.awt.Rectangle 是否包含特定 Java.awt.Color 的像素。我一直在到处寻找,但找不到任何关于此的信息,甚至找不到任何可能的信息。 所以我想知道如何确定
我试图在组件和图像之间切换面板的内容,它适用于组件: imgpanel.removeAll(); Component comp; if ((comp = player.getVisualCompone
我在使用 JAVA 编码时遇到一些错误,我一直在尝试解决这个问题,也试图找到其他有同样问题的人并修复它,但没有任何效果... 嗯..这是代码 package ca.vanzeben.game;
我想我可以尝试一下 JAXB 来处理存储和恢复设置。但即使是“最简单”的例子我也遇到了麻烦: import java.awt.Point; public class Config { public
这个问题已经有答案了: Import package.* vs import package.SpecificType [duplicate] (10 个回答) 已关闭 7 年前。 在我现在正在进行的
private static byte[] get_byte_data(BufferedImage image) { //WritableRaster raster = image.get
是否有可能获得标准 AWT Cursor以位图图像的形式(例如 BufferedImage )或任何可在 Graphics2D 上绘制的图像?例如,文本光标 new Cursor(Cursor.TEX
我的代码中有三个点,我想填充它们之间的区域,或者换句话说,在 3 个点之间绘制并填充一个三角形。 我想过简单地用 for 循环绘制线条(从 x1 到 x2),但我认为这不会有效,是否有其他更有效的方法
我正在制作一个小脚本,我使用鼠标键来节省我的工作时间。我可以正确、良好地使用鼠标键。但是,当使用 java.awt.Robot 和 java.awt.event.KeyEvent 时,鼠标键基本上被忽
我正在尝试在 scala 中使用 java awt 来制作一个简单的桌面应用程序。我已经在它上面工作了几天,没有任何问题,直到我有 2 天没有碰它,当我回来时,我得到一个 java.lang.NoCl
我在 VisualVM 和线程 View 中监视一个 JavaFX 程序,不断有 AWT-EventQueue-0 和 AWT-Shutdown 线程被创建和销毁。这是正常行为吗?这是什么原因? 最佳
我需要将 java.awt.geom.Area 或 java.awt.Shape 转换为 java.awt.Polygon。我所知道的是:isSingular = true、isPolygonal =
我正在重新使用 Java 并审查我的一些旧代码,并且我看到了很多我已经完成的地方 import javax.swing.*; import java.awt.*; 或者实际上从 swing/awt 包
晚上, 我在玩一个小的 swing 应用程序,我添加了一个按钮来响应按下。因此我需要实现 ActionListener。我已经添加了这一行: import java.awt.*; 但它告诉我找不到“A
我有这个 java 代码: Editor() { javax.swing.SwingUtilities.invokeLater(new Runnable() { pub
请帮我解决这个问题 sun.awt.image.ToolkitImage 无法转换为 java.awt.image.BufferedImage if (shape.hasImage())
嗨 Stackoverflow 的 friend 们 我最近将 Jenkins 服务器配置到 Apache Tomcat 7.0.42我制作的程序是将 jenkins.war 文件部署到 tomcat
我是一名优秀的程序员,十分优秀!