Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建自定义键盘时发生Java.lang.classnotfoundException_Java_Android - Fatal编程技术网

创建自定义键盘时发生Java.lang.classnotfoundException

创建自定义键盘时发生Java.lang.classnotfoundException,java,android,Java,Android,我想在android中创建一个自定义键盘。为此,我遵循了以下教程:- 本教程没有活动类,只有服务类。当我运行代码时,它会给我classnotfound异常,如下所示:- 08-23 06:14:41.627: E/AndroidRuntime(645): at android.app.ActivityThread.handleCreateService(ActivityThread.java:2570) 08-23 06:14:41.627: E/AndroidRuntime(645):

我想在android中创建一个自定义键盘。为此,我遵循了以下教程:-

本教程没有活动类,只有服务类。当我运行代码时,它会给我classnotfound异常,如下所示:-

08-23 06:14:41.627: E/AndroidRuntime(645):  at android.app.ActivityThread.handleCreateService(ActivityThread.java:2570)
08-23 06:14:41.627: E/AndroidRuntime(645):  at android.app.ActivityThread.access$1800(ActivityThread.java:139)
08-23 06:14:41.627: E/AndroidRuntime(645):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1292)
08-23 06:14:41.627: E/AndroidRuntime(645):  at android.os.Handler.dispatchMessage(Handler.java:102)
08-23 06:14:41.627: E/AndroidRuntime(645):  at android.os.Looper.loop(Looper.java:136)
08-23 06:14:41.627: E/AndroidRuntime(645):  at android.app.ActivityThread.main(ActivityThread.java:5086)
08-23 06:14:41.627: E/AndroidRuntime(645):  at java.lang.reflect.Method.invokeNative(Native Method)
08-23 06:14:41.627: E/AndroidRuntime(645):  at java.lang.reflect.Method.invoke(Method.java:515)
08-23 06:14:41.627: E/AndroidRuntime(645):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
08-23 06:14:41.627: E/AndroidRuntime(645):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
08-23 06:14:41.627: E/AndroidRuntime(645):  at dalvik.system.NativeStart.main(Native Method)
08-23 06:14:41.627: E/AndroidRuntime(645): Caused by: java.lang.ClassNotFoundException: Didn't find class "com.example.kb.SimpleIME" on path: DexPathList[[zip file "/data/app/com.example.kb-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.example.kb-2, /vendor/lib, /system/lib]]
08-23 06:14:41.627: E/AndroidRuntime(645):  at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
08-23 06:14:41.627: E/AndroidRuntime(645):  at java.lang.ClassLoader.loadClass(ClassLoader.java:497)
08-23 06:14:41.627: E/AndroidRuntime(645):  at java.lang.ClassLoader.loadClass(ClassLoader.java:457)
08-23 06:14:41.627: E/AndroidRuntime(645):  at android.app.ActivityThread.handleCreateService(ActivityThread.java:2567)
08-23 06:14:41.627: E/AndroidRuntime(645):  ... 10 more
package kb;

import com.example.kb.R;

import android.inputmethodservice.InputMethodService;
import android.inputmethodservice.Keyboard;
import android.inputmethodservice.KeyboardView;
import android.inputmethodservice.KeyboardView.OnKeyboardActionListener;
import android.media.AudioManager;
import android.view.KeyEvent;
import android.view.View;
import android.view.inputmethod.InputConnection;

public class SimpleIME extends InputMethodService implements
        OnKeyboardActionListener {

    private KeyboardView kv;
    private Keyboard keyboard;

    private boolean caps = false;

    @Override
    public View onCreateInputView() {
        kv = (KeyboardView) getLayoutInflater()
                .inflate(R.layout.keyboard, null);
        keyboard = new Keyboard(this, R.xml.qwerty);
        kv.setKeyboard(keyboard);
        kv.setOnKeyboardActionListener(this);
        return kv;
    }

    private void playClick(int keyCode) {
        AudioManager am = (AudioManager) getSystemService(AUDIO_SERVICE);
        switch (keyCode) {
        case 32:
            am.playSoundEffect(AudioManager.FX_KEYPRESS_SPACEBAR);
            break;
        case Keyboard.KEYCODE_DONE:
        case 10:
            am.playSoundEffect(AudioManager.FX_KEYPRESS_RETURN);
            break;
        case Keyboard.KEYCODE_DELETE:
            am.playSoundEffect(AudioManager.FX_KEYPRESS_DELETE);
            break;
        default:
            am.playSoundEffect(AudioManager.FX_KEYPRESS_STANDARD);
        }
    }

    @Override
    public void onKey(int primaryCode, int[] keyCodes) {

        InputConnection ic = getCurrentInputConnection();
        playClick(primaryCode);
        switch (primaryCode) {
        case Keyboard.KEYCODE_DELETE:
            ic.deleteSurroundingText(1, 0);
            break;
        case Keyboard.KEYCODE_SHIFT:
            caps = !caps;
            keyboard.setShifted(caps);
            kv.invalidateAllKeys();
            break;
        case Keyboard.KEYCODE_DONE:
            ic.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN,
                    KeyEvent.KEYCODE_ENTER));
            break;
        default:
            char code = (char) primaryCode;
            if (Character.isLetter(code) && caps) {
                code = Character.toUpperCase(code);
            }
            ic.commitText(String.valueOf(code), 1);
        }

    }

    @Override
    public void onPress(int primaryCode) {
    }

    @Override
    public void onRelease(int primaryCode) {
    }

    @Override
    public void onText(CharSequence text) {
    }

    @Override
    public void swipeDown() {
    }

    @Override
    public void swipeLeft() {
    }

    @Override
    public void swipeRight() 
    }

    @Override
    public void swipeUp() {
    }
}
我的主要文件如下所示:-

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.kb"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="21" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <service
        android:name=".SimpleIME"
        android:label="@string/simple_ime"
        android:permission="android.permission.BIND_INPUT_METHOD" >
        <meta-data
            android:name="android.view.im"
            android:resource="@xml/method" />

        <intent-filter>
            <action android:name="android.view.InputMethod" />
        </intent-filter>
    </service>
</application>

我搜索了所有地方,但没有找到解决方案。一个解决方案是检查类的名称(simpleme)和mainfest声明名称(.simpleme)是否相同。请帮助我解决这个问题。我没有找到解决方案

查看
simpleme
类的顶部,包声明只列出
kb
,而查看类加载器试图加载的内容应该是
com.example.kb
。同样地,你确定你的
simpleme
类在正确的包中吗?哇,你真是天才。我刚刚删除了作为kb的默认包。并创建了一个名为“com.example.kb”的新类。它工作正常。感谢lot查看
simpleme
类的顶部,包声明仅列出
kb
,而查看类加载器试图加载的内容应该是
com.example.kb
。同样地,你确定你的
simpleme
类在正确的包中吗?哇,你真是天才。我刚刚删除了作为kb的默认包。并创建了一个名为“com.example.kb”的新的。它工作正常。非常感谢