创建自定义键盘时发生Java.lang.classnotfoundException
我想在android中创建一个自定义键盘。为此,我遵循了以下教程:- 本教程没有活动类,只有服务类。当我运行代码时,它会给我classnotfound异常,如下所示:-创建自定义键盘时发生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):
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”的新的。它工作正常。非常感谢