我一直在关注CN1官方主页上的指南:https://codenameone.teachable.com/courses/java-for-mobile-devices-introducing-codename-one/lectures/2647773
它运行得非常好,对贯彻执行起到了很大的帮助。不过,最后,我们要实现的是缩小工具栏的动画,有一个错误,我无法解释。
这就是片段:
// animations
ComponentAnimation c1 = shoppingList.getToolbar().createStyleAnimation("ShopToolbarShrunk", 200);
ComponentAnimation c2 = titleLabel.createStyleAnimation("TitleShrunk", 200);
ComponentAnimation c3 = fab.createStyleAnimation("FloatingActionButtonShrunk", 200);
shoppingList.getAnimationManager().onTitleScrollAnimation(c1, c2, c3);
代码运行,模拟器打开。我可以移动鼠标滚轮或鼠标来滚动列表,然后动画开始。就在动画的最小尺寸之前,它会崩溃,并出现以下跟踪:
java.lang.StackOverflowError
at java.awt.Font.<init>(Unknown Source)
at java.awt.Font.<init>(Unknown Source)
at java.awt.Font.deriveFont(Unknown Source)
at com.codename1.impl.javase.JavaSEPort.deriveTrueTypeFont(JavaSEPort.java:4841)
at com.codename1.ui.Font.derive(Font.java:273)
at com.codename1.ui.Component$2.updateState(Component.java:2625)
at com.codename1.ui.animations.ComponentAnimation.updateAnimationState(ComponentAnimation.java:95)
at com.codename1.ui.AnimationManager$2.scrollChanged(AnimationManager.java:139)
at com.codename1.ui.util.EventDispatcher.fireScrollEvent(EventDispatcher.java:427)
at com.codename1.ui.Component.setScrollY(Component.java:1879)
at com.codename1.ui.Component.laidOut(Component.java:4409)
at com.codename1.ui.Container.doLayout(Container.java:1430)
at com.codename1.ui.Container.layoutContainer(Container.java:1412)
at com.codename1.ui.Container.doLayout(Container.java:1425)
at com.codename1.ui.Container.layoutContainer(Container.java:1412)
at com.codename1.ui.Container.doLayout(Container.java:1425)
at com.codename1.ui.Container.layoutContainer(Container.java:1412)
at com.codename1.ui.Container.revalidate(Container.java:1058)
at com.codename1.ui.AnimationManager$2.scrollChanged(AnimationManager.java:144)
at com.codename1.ui.util.EventDispatcher.fireScrollEvent(EventDispatcher.java:427)
at com.codename1.ui.Component.setScrollY(Component.java:1879)
at com.codename1.ui.Component.laidOut(Component.java:4409)
at com.codename1.ui.Container.doLayout(Container.java:1430)
at com.codename1.ui.Container.layoutContainer(Container.java:1412)
at com.codename1.ui.Container.doLayout(Container.java:1425)
at com.codename1.ui.Container.layoutContainer(Container.java:1412)
at com.codename1.ui.Container.doLayout(Container.java:1425)
at com.codename1.ui.Container.layoutContainer(Container.java:1412)
at com.codename1.ui.Container.revalidate(Container.java:1058)
at com.codename1.ui.AnimationManager$2.scrollChanged(AnimationManager.java:144)
...
痕迹无休止地重复着。可以很容易地看出,这是一个无限循环,导致java堆栈溢出,引发异常。
首先,我觉得我有不同的字体会把动画搞砸。然而,我的主题中唯一自定义的字体是标题栏的字体,它被设置为native:mainthin,用于"title"one_answers"titleShrunk"GUID。即使是相同的字体,我还是会遇到这个问题。
以上是一个很好的指南,我希望能一直坚持到最后,因为这也是一个非常酷的动画。
您的项目似乎真的过时了,这意味着这个问题可能早就解决了。请确保您的插件是最新的,然后按照此处的说明确保您的libs是最新https://www.codenameone.com/blog/tip-fix-issue-missing-builds.html
假设这种情况仍然存在,请使用新的异常更新堆栈跟踪,因为行号会有所不同。然后在这里评论,这样我就会看到问题的更新并修改答案。