【问题标题】:Creating screensaver using nativeInterface使用 nativeInterface 创建屏幕保护程序
【发布时间】:2017-03-02 20:43:58
【问题描述】:

我正在尝试使用 codenameone 更改 android 手机上的屏幕保护程序,因此,我正在使用本机界面进程,

然后我创建我的主类,然后在创建从 NativeInterface 继承的“MyNativeContent”之后,

内容如下: 包 com.faugan.addscreen;

import com.codename1.system.NativeInterface;

/**
 *
 * @author ccpita
 */
public interface MyNativeContent extends NativeInterface{
    public void testAndroidNatif();
}

现在我在我的界面上单击鼠标右键,为所有平台生成本机访问,

然后在我从我的 android 目录打开 MyNativeContentImpl.java 并在里面执行此操作后:

package com.faugan.addscreen;

public class MyNativeContentImpl {
    public void testAndroidNatif() {
        // code for screensaver on android
    }

    public boolean isSupported() {
        return true;
    }

}

现在当我编译它时,它失败了,我遇到了这个错误:

java.lang.ClassNotFoundException: com.faugan.addscreen.MyNativeContentImpl 在 java.net.URLClassLoader.findClass(URLClassLoader.java:381) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:424) 在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:357) 在 java.lang.ClassLoader.findSystemClass(ClassLoader.java:1001) 在 com.codename1.impl.javase.ClassPathLoader.findClass(ClassPathLoader.java:100) 在 com.codename1.impl.javase.ClassPathLoader.loadClass(ClassPathLoader.java:50) 在 java.lang.Class.forName0(本机方法) 在 java.lang.Class.forName(Class.java:264) 在 com.codename1.system.NativeLookup.create(NativeLookup.java:81) 在 com.faugan.addscreen.MyApplication.lambda$start$0(MyApplication.java:47) 在 com.codename1.ui.util.EventDispatcher.fireActionEvent(EventDispatcher.java:349) 在 com.codename1.ui.Component.pointerReleased(Component.java:3260) 在 com.codename1.ui.Form.pointerReleased(Form.java:2651) 在 com.codename1.ui.Component.pointerReleased(Component.java:3239) 渲染帧耗时 722 毫秒 在 com.codename1.ui.Display.handleEvent(Display.java:2025) 在 com.codename1.ui.Display.edtLoopImpl(Display.java:1070) 在 com.codename1.ui.Display.mainEDTLoop(Display.java:999) 在 com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:120) 在 com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176) java.lang.NullPointerException 在 com.faugan.addscreen.MyApplication.lambda$start$0(MyApplication.java:48) 在 com.codename1.ui.util.EventDispatcher.fireActionEvent(EventDispatcher.java:349) 在 com.codename1.ui.Component.pointerReleased(Component.java:3260) 在 com.codename1.ui.Form.pointerReleased(Form.java:2651) 在 com.codename1.ui.Component.pointerReleased(Component.java:3239) 在 com.codename1.ui.Display.handleEvent(Display.java:2025) 在 com.codename1.ui.Display.edtLoopImpl(Display.java:1070) 在 com.codename1.ui.Display.mainEDTLoop(Display.java:999) 在 com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:120) 在 com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176)

现在我的问题是:

1) 当我遇到这些错误时?是因为这是在模拟器中运行的吗?

2) 你能告诉我在testAndroidNatif() 方法中添加什么来更改安卓手机的屏幕保护程序吗?

谢谢

【问题讨论】:

    标签: java android codenameone


    【解决方案1】:

    您应该首先创建扩展NativeInterfaceMyNativeContent 接口,然后右键单击它并选择Generate Native Access

    切换到文件选项卡并展开文件夹native -> android -> com -> faugan -> addscreen。然后打开MyNativeContentImpl.java 文件,这里将添加您所有的Android 原生代码。

    您可以在此文件夹中添加更多的 android 文件并在 MyNativeContentImpl.java 文件中引用它们。记得在MyNativeContentImplisSupported()方法中返回true。

    至于您的第二个问题,这是特定于 Android 的问题,您必须自己完成或在 StackOverflow 上使用 androidjava 标签询问,或在 sample codes to change screensaver from an Android App 上搜索。例如,看看这个关于 SO 的问题...android-screen-saver-sample-code

    【讨论】:

    • 对于第一个问题,我仍然有错误,但是对于第二个问题,您发送的链接,我只看到一个 xml 内容作为代码,我如何将它集成到代号中?我不知道原生android编码,你能举个例子,你使用codenameone并在里面集成android原生代码吗?谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-04
    • 1970-01-01
    • 2015-01-23
    • 1970-01-01
    • 2012-01-11
    相关资源
    最近更新 更多