- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我尝试创建一个框架来执行 Diashow,但由于某种原因,我只能看到一个空框架,在一切完成后,我看到最后一张图片。我想要看到的是每张图片之间都有大约 1 秒的停顿。我按照我认为的工作方式使用了 revalidate()/repaint() ,但我相当确定问题就在那里,因为我想不出其他原因。
我才刚刚开始学习 Java.Swing,因此非常欢迎任何意见来提高我的技能。正如我已经说过的,我认为问题出在我对 revalidate() 的使用上,但我无法单独通过 google 修复它..
作为类的输入,我使用 BufferedImage 数组,我想为其创建 diashow。
我还尝试将图像直接放在我的 Container c 上,而不是放在 JPanel p 上,但无论我想要什么方式,它都不起作用。
public class DiashowFrame extends JFrame {
Container c;
JPanel p;
public DiashowFrame(JFrame father,BufferedImage [] image) {
c= getContentPane();
c.setLayout(new FlowLayout());
p = new JPanel();
p.setLayout(new FlowLayout());
p.setSize(500,500);
c.add(p);
setSize(500,500);
setLocation(father.getX(),father.getY());
setVisible(true);
dia(p,image);
}
public static void dia(JPanel p,BufferedImage[] image) {
JLabel def= new JLabel(new ImageIcon(image[0]));
p.add(def);
//c.repaint();
p.revalidate();
for(int x=1;x<image.length;x++) {
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//p.removeAll();
//p.revalidate();
Image imager = image[x].getScaledInstance(500, 500, 100);
def = new JLabel(new ImageIcon(imager));
p.add(def);
p.revalidate();
//p.repaint();
}
}
}
最佳答案
首先查看 Concurrency in Swing .
与大多数 GUI 框架一样,Swing 是单线程的并且不是线程安全的。
这意味着从事件调度线程内执行的任何长时间运行或阻塞操作都将阻止 EDT 处理事件队列并以任何方式更新 UI。
虽然您可以使用Thread
将等待时间转移到第二个线程,但 Swing 不是线程安全的,这意味着您永远不应该从上下文外部直接或间接更新/修改 UI美国东部时间。
您的情况最简单的解决方案是简单地使用 Swing Timer
。这允许您指定更新之间的延迟(以及是否重复),该延迟在 EDT 之外执行,但在触发时会在 EDT 上下文中收到通知,从而使 Swing 的使用变得简单、安全。
Timer
充当伪循环,Timer
的每次触发代表下一次迭代
参见How to use Swing Timers了解更多详情
关于Java 使用 revalidate() 和 repaint() 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48253092/
在我的理解中,这两个指令都意味着缓存服务器将要求原始服务器重新验证来自客户端浏览器的请求。这两个指令有什么区别? 最佳答案 RFC 7234, section 5.2.2.7 , 解释: The "p
Cache-Control: no-cache 与 Cache-Control: max-age=0, must-revalidate, proxy-revalidate 的 HTTP 响应有什么区别
我经常用 Cache-Control: no-cache 或 Cache-Control: max-age=0 规范说must-revalidate是为了max-stale...(服务器问题max-s
因此,我编写了一段代码,在单击框架南部区域的按钮后,您会得到一个矩形。 但是由于这个原因,单击按钮后代码似乎不起作用 public void actionPerformed(ActionEvent e
我有一个主 JPanel、一个内部 JPanel 和一个用于内部 JPanel 的 JScrollPane mainPanel = new JPanel(); innerPanel = new JPa
我就遇到过这样的问题。当我在容器上调用 .revalidate 时,出现 IndexOutOfBoundsException。 我有一个 Runnable 类,它可以增加或减少组件的边距。我用它来制作
我正在尝试创建一个窗口框架来显示游戏窗口。我在 GameWindow 类中扩展了 JFrame 并创建了两个方法:drawBackground(用实心矩形填充屏幕)和 drawGrid,使用 for
**你好,我正在尝试用 java 创建一个存档器。这意味着我不断地从流中读取和写入。我希望能够更新 JProgressBar 以显示我已经写了多少。我的代码当前在存档中的每个条目之后更新进度栏。我的变
对于我的程序,我有一个 JPane,随着游戏的进行,它会向面板添加标签,但是我可以让面板显示的唯一方法是使用 add(label) 然后重新验证,反之亦然以删除标签。 我的问题是,一旦我在屏幕上有超过
我们正在使用Varnish缓存6.2来位于WebAPI后端的前面。 后端会在某些请求上向后发送一个缓存控制 header ,以便我们可以缓存更长的时间。 但是-如果后端出现故障并保持故障状态,我们将在
我正在尝试使Varnish与最后修改的 header 一起使用,但是无论我做什么,我的页面都会在120年代被缓存,并且Varnish永远不会使用后端进行验证。 我的后端正在发送这些 header :
我有这个 NextJS 站点,其中有从 Firestore 加载数据的 getStaticProps。 我有这个: return { props: { allPosts: post
我对java很陌生,我正在尝试创建我自己的拼字游戏。我创建了自己的 Board 类和 Tile 类 JPanel。当我在板上绘制图 block 时: Tile tile = new Tile(curr
Cloudflare 记录了 Cache-Control 的指令列表 header ,包括 stale-while-revalidate . stale-while-revalidate= When
网址:http://tinyurl.com/358lh6a 每当 DomainSelect(域扩展名)无论如何更改时,我都想重新验证宫殿地址(他们想要的域,形式是:名称)。 我尝试了一个简单的方法:
我在 JPanel 中有一个方法 private void paintScore(Graphics2D g) { Font scoreFont = new Font("Arial", Font
我正在组合一个 Swing 应用程序,我经常想在其中替换 JPanel 的内容。为此,我调用 removeAll(),然后添加我的新内容,然后调用 revalidate()。 但是,我发现旧内容实际上
本文整理了Java中org.knowm.xchart.XChartPanel.revalidate()方法的一些代码示例,展示了XChartPanel.revalidate()的具体用法。这些代码示例
如果应用中的购买调用 BillingClient.BillingResponseCode.ITEM_ALREADY_OWNED:需要调用 acknowledgePurchase(... 重新验证订单的
我在尝试查询表 AVC 时突然开始遇到此错误。 ORA-04045: errors during recompilation/revalidation of PUBLIC.AVC ORA-04098:
我是一名优秀的程序员,十分优秀!