【问题标题】:CN1 - onTitleScrollAnimation buggedCN1 - onTitleScrollAnimation 被窃听
【发布时间】:2019-04-20 01:20:30
【问题描述】:

我一直在关注CN1官方主页的指南:https://codenameone.teachable.com/courses/java-for-mobile-devices-introducing-codename-one/lectures/2647773

它工作得非常好,对贯彻执行很有帮助。不过最后,我们是关于实现缩小工具栏的动画,有一个错误,我无法解释。

那是sn-p:

// 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”和“titleShrunk”GUID。即使它是相同的字体,我仍然会遇到这个问题。

以上是一个很好的指南,我希望能坚持到最后,因为这也是一个非常酷的动画。

【问题讨论】:

    标签: java animation mobile codenameone


    【解决方案1】:

    您的项目似乎真的过时了,这意味着这个问题可能在很久以前就已经解决了。请确保您的插件是最新的,然后按照此处的说明确保您的库是最新的https://www.codenameone.com/blog/tip-fix-issue-missing-builds.html

    假设这仍然发生,请使用新异常更新堆栈跟踪,因为行号会有所不同。然后在此处发表评论,以便我查看问题的更新并修改答案。

    【讨论】:

    • 谢谢你。该插件已经是最新版本,但是我必须在 CN1 Settings -> Basic 窗口中更新项目库。现在可以正常工作了,完全按照您的指南 :)
    猜你喜欢
    • 2015-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-10
    • 2021-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多