- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我就遇到过这样的问题。当我在容器上调用 .revalidate 时,出现 IndexOutOfBoundsException。
我有一个 Runnable 类,它可以增加或减少组件的边距。我用它来制作抽屉动画。除了这个异常(exception)之外,一切都运行良好。 Ans 异常是随机抛出的。在将此异常记录到控制台之前,我可以多次运行“动画”方法。
在该异常之后,应用程序运行正常。仅容器显示不正确。
这是错误日志:
Exception in thread "Thread-15" java.lang.IndexOutOfBoundsException: Index: 5, Size: 1
at java.util.ArrayList.rangeCheck(ArrayList.java:635)
at java.util.ArrayList.get(ArrayList.java:411)
at com.codename1.ui.Container.getComponentAt(Container.java:1083)
at com.codename1.ui.Container.doLayout(Container.java:1054)
at com.codename1.ui.Container.layoutContainer(Container.java:1043)
at com.codename1.ui.Container.doLayout(Container.java:1056)
at com.codename1.ui.Container.layoutContainer(Container.java:1043)
at com.codename1.ui.Container.doLayout(Container.java:1056)
at com.codename1.ui.Container.layoutContainer(Container.java:1043)
at com.codename1.ui.Container.doLayout(Container.java:1056)
at com.codename1.ui.Container.layoutContainer(Container.java:1043)
at com.codename1.ui.Container.revalidate(Container.java:835)
at util.classes.AnimationRunnable.run(AnimationRunnable.java:75)
at java.lang.Thread.run(Thread.java:745)
为什么会这样?可能是什么问题?
谢谢!
更新:这是我的可运行类:
删除了不必要的代码:
public class AnimationRunnable implements Runnable {
private float marginFrom = 0;
private float marginTo = 0;
private Container bottomContainer;
private int screenHeight;
public AnimationRunnable(Container bottomContainer, int screenHeight, float marginFrom, float marginTo) {
this.marginFrom = marginFrom;
this.marginTo = marginTo;
this.bottomContainer = bottomContainer;
this.screenHeight = screenHeight;
}
@Override
public void run() {
boolean finished = false;
boolean directionUp = marginFrom > marginTo; // true = up; false = down
Container parent = bottomContainer.getParent();
while (!finished) {
// if distance between current margin and destination margin is < 10, finish
if (Math.abs(marginFrom - marginTo) < 10) {
finished = true;
} else {
// if container size is increasing
if (directionUp) {
// if current margin is less than destination margin
if (marginFrom <= marginTo) {
marginFrom = marginTo;
finished = true;
} else {
// else - modify current margin to be closer to destination margin
marginFrom -= Math.ceil((marginFrom - marginTo) / 6);
}
} else {
// if current margin is less than destination margin
if (marginFrom >= marginTo) {
marginFrom = marginTo;
finished = true;
} else {
// else - modify current margin to be closer to destination margin
marginFrom += Math.ceil((marginTo - marginFrom) / 6);
}
}
}
// Setting style to container (in case if container's current style is changed)
Style defaultStyle = bottomContainer.getStyle();
bottomContainer.getStyle().setMargin(Component.TOP, Math.round(marginFrom));
// Setting default style to all container states
// HERE EXCEPTION IS THROWN
// Revalidating either parent, or container itself
if (parent != null) {
parent.revalidate();
parent.repaint();
} else {
bottomContainer.revalidate();
bottomContainer.repaint();
}
try {
// Wait 25ms to make animation smooth
Thread.sleep(25);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
// revalidate once more after loop is over
if (parent != null) {
parent.revalidate();
parent.repaint();
} else {
bottomContainer.revalidate();
bottomContainer.repaint();
}
return;
}
}
更新
CallSerially 不显示动画,它只是等待,并在动画可运行时更新 UI。但是使用此动画可运行调用 Display.geInstance().invokeAndBlock() 可以按需要正常工作,不会引发异常。
最佳答案
您正在更改 UI,而不是在 EDT 上,这可能会导致您正在运行的线程与 EDT(事件调度线程)之间出现问题和冲突。
关于java - 代号一container.revalidate()有时会抛出IndexOutOfBoundsException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26139205/
在我的理解中,这两个指令都意味着缓存服务器将要求原始服务器重新验证来自客户端浏览器的请求。这两个指令有什么区别? 最佳答案 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:
我是一名优秀的程序员,十分优秀!