使用nativeInterface

时间:2017-03-02 10:53:00

标签: java android codenameone

我正在尝试使用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       at java.net.URLClassLoader.findClass(URLClassLoader.java:381)       at java.lang.ClassLoader.loadClass(ClassLoader.java:424)       at sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:331)       at java.lang.ClassLoader.loadClass(ClassLoader.java:357)       at 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)       at java.lang.Class.forName0(Native Method)       at 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)       at 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()方法中添加什么来改变Android手机上的屏幕保护程序吗?

谢谢

1 个答案:

答案 0 :(得分:1)

首先应创建扩展b = Company.find(2) // Company-B b.update(company_assets_attributes: [{info: 'abc', asset_attributes: {label: 'Asset A'}}]) 的{​​{1}}界面,然后右键单击该界面并选择生成原生访问

切换到“文件”标签,然后展开文件夹MyNativeContent - > NativeInterface - > native - > android - > com。然后打开faugan文件,这是添加所有Android原生代码的地方。

您可以在此文件夹中添加更多Android文件,并在addscreen文件中引用它们。请务必使用MyNativeContentImpl.java的{​​{1}}方法返回true。

关于您的第二个问题,这是Android特定的,您必须自己做,或者在StackOverflow上使用MyNativeContentImpl.javaisSupported()标记或在MyNativeContentImpl上搜索。例如,在SO上查看这个问题...... android-screen-saver-sample-code