【发布时间】:2021-12-25 08:58:03
【问题描述】:
我目前正在开发一个 android 项目,并且在构建后尝试运行时,应用程序崩溃了。 以下是 LogCat 的详细信息:
2021-11-13 13:37:08.105 11908-11908/com.example.finalproject E/AndroidRuntime: FATAL EXCEPTION: main 进程:com.example.finalproject,PID:11908 java.lang.RuntimeException:无法实例化活动 ComponentInfo{com.example.finalproject/com.example.finalproject.MainActivity}:java.lang.ClassNotFoundException:在路径上找不到类“com.example.finalproject.MainActivity”: DexPathList[[zip file "/data/app/~~jkeaLklNJ36aGEn6TYoiKg==/com.example.finalproject-gztqZ1eOAQvQH4Dc0_rPwA==/base.apk"],nativeLibraryDirectories=[/data/app/~~jkeaLklNJ36aGEn6TYoiKg==/com.example .finalproject-gztqZ1eOAQvQH4Dc0_rPwA==/lib/arm64, /system/lib64, /system/system_ext/lib64]] 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3492) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3748) 在 android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85) 在 android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 在 android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:2187) 在 android.os.Handler.dispatchMessage(Handler.java:106) 在 android.os.Looper.loop(Looper.java:236) 在 android.app.ActivityThread.main(ActivityThread.java:8057) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:620) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1011) 原因:java.lang.ClassNotFoundException:在路径上找不到类“com.example.finalproject.MainActivity”:DexPathList [[zip 文件“/data/app/~~jkeaLklNJ36aGEn6TYoiKg==/com.example.finalproject-gztqZ1eOAQvQH4Dc0_rPwA ==/base.apk"],nativeLibraryDirectories=[/data/app/~~jkeaLklNJ36aGEn6TYoiKg==/com.example.finalproject-gztqZ1eOAQvQH4Dc0_rPwA==/lib/arm64, /system/lib64, /system/system_ext/lib64]] 在 dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:207) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:379) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:312) 在 android.app.AppComponentFactory.instantiateActivity(AppComponentFactory.java:95) 在 androidx.core.app.CoreComponentFactory.instantiateActivity(CoreComponentFactory.java:45) 在 android.app.Instrumentation.newActivity(Instrumentation.java:1253) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3480) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3748) 在 android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85) 在 android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 在 android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:2187) 在 android.os.Handler.dispatchMessage(Handler.java:106) 在 android.os.Looper.loop(Looper.java:236) 在 android.app.ActivityThread.main(ActivityThread.java:8057) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:620) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1011) 抑制:java.lang.NoClassDefFoundError:解析失败:Lcom/scaledrone/lib/RoomListener; 在 java.lang.VMClassLoader.findLoadedClass(本机方法) 在 java.lang.ClassLoader.findLoadedClass(ClassLoader.java:738) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:363) ... 16 更多 引起:java.lang.ClassNotFoundException:在路径上找不到类“com.scaledrone.lib.RoomListener”:DexPathList [[zip file“/data/app/~~jkeaLklNJ36aGEn6TYoiKg==/com.example.finalproject-gztqZ1eOAQvQH4Dc0_rPwA ==/base.apk"],nativeLibraryDirectories=[/data/app/~~jkeaLklNJ36aGEn6TYoiKg==/com.example.finalproject-gztqZ1eOAQvQH4Dc0_rPwA==/lib/arm64, /system/lib64, /system/system_ext/lib64]] 在 dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:207) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:379) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:312) ... 19 更多 2021-11-13 13:37:08.128 11908-11908/? I/Process:发送信号。 PID:11908 SIG:9
代码如下: MainActivity.java
package com.example.finalproject;
import android.os.Bundle;
import android.view.View;
import android.widget.AbsSpinner;
import android.widget.EditText;
import android.widget.ListView;
import androidx.appcompat.app.AppCompatActivity;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.scaledrone.lib.Listener;
import com.scaledrone.lib.Member;
import com.scaledrone.lib.Room;
import com.scaledrone.lib.RoomListener;
import com.scaledrone.lib.Scaledrone;
import java.util.Random;
public class MainActivity extends AppCompatActivity implements RoomListener {
private String channelID = "BmQHPGgq5n0DImdL";
private String roomName = "observable-room";
private EditText editText;
private Scaledrone scaledrone;
private MessageAdapter messageAdapter;
private ListView messagesView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = (EditText) findViewById(R.id.editText);
messageAdapter = new MessageAdapter(this);
messagesView = (ListView) findViewById(R.id.messages_view);
messagesView.setAdapter(messageAdapter);
MemberData data = new MemberData(getRandomName(), getRandomColor());
scaledrone = new Scaledrone(channelID, data);
scaledrone.connect(new Listener() {
@Override
public void onOpen() {
System.out.println("Scaledrone connection open");
scaledrone.subscribe(roomName, MainActivity.this);
}
@Override
public void onOpenFailure(Exception ex) {
System.err.println(ex);
}
@Override
public void onFailure(Exception ex) {
System.err.println(ex);
}
@Override
public void onClosed(String reason) {
System.err.println(reason);
}
});
}
public void sendMessage(View view) {
String message = editText.getText().toString();
if (message.length() > 0) {
scaledrone.publish(roomName, message);
editText.getText().clear();
}
}
@Override
public void onOpen(Room room) {
System.out.println("Connected to room");
}
@Override
public void onOpenFailure(Room room, Exception ex) {
System.err.println(ex);
}
@Override
public void onMessage(Room room, com.scaledrone.lib.Message receivedMessage) {
final ObjectMapper mapper = new ObjectMapper();
try {
final MemberData data = mapper.treeToValue(receivedMessage.getMember().getClientData(), MemberData.class);
boolean belongsToCurrentUser = receivedMessage.getClientID().equals(scaledrone.getClientID());
final Message message = new Message(receivedMessage.getData().asText(), data, belongsToCurrentUser);
runOnUiThread(new Runnable() {
@Override
public void run() {
messageAdapter.add(message);
messagesView.setSelection(messagesView.getCount() - 1);
}
});
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}
private String getRandomName() {
String[] adjs = {"autumn", "hidden", "bitter", "misty", "silent", "empty", "dry", "dark", "summer", "icy", "delicate", "quiet", "white", "cool", "spring", "winter", "patient", "twilight", "dawn", "crimson", "wispy", "weathered", "blue", "billowing", "broken", "cold", "damp", "falling", "frosty", "green", "long", "late", "lingering", "bold", "little", "morning", "muddy", "old", "red", "rough", "still", "small", "sparkling", "throbbing", "shy", "wandering", "withered", "wild", "black", "young", "holy", "solitary", "fragrant", "aged", "snowy", "proud", "floral", "restless", "divine", "polished", "ancient", "purple", "lively", "nameless"};
String[] nouns = {"waterfall", "river", "breeze", "moon", "rain", "wind", "sea", "morning", "snow", "lake", "sunset", "pine", "shadow", "leaf", "dawn", "glitter", "forest", "hill", "cloud", "meadow", "sun", "glade", "bird", "brook", "butterfly", "bush", "dew", "dust", "field", "fire", "flower", "firefly", "feather", "grass", "haze", "mountain", "night", "pond", "darkness", "snowflake", "silence", "sound", "sky", "shape", "surf", "thunder", "violet", "water", "wildflower", "wave", "water", "resonance", "sun", "wood", "dream", "cherry", "tree", "fog", "frost", "voice", "paper", "frog", "smoke", "star"};
return (
adjs[(int) Math.floor(Math.random() * adjs.length)] +
"_" +
nouns[(int) Math.floor(Math.random() * nouns.length)]
);
}
private String getRandomColor() {
Random r = new Random();
StringBuffer sb = new StringBuffer("#");
while(sb.length() < 7){
sb.append(Integer.toHexString(r.nextInt()));
}
return sb.toString().substring(0, 7);
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:clipToPadding="false"
android:focusableInTouchMode="true"
tools:context=".MainActivity">
<ListView
android:layout_width="match_parent"
android:id="@+id/messages_view"
android:layout_weight="2"
android:divider="#fff"
android:layout_height="wrap_content"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#fff"
android:orientation="horizontal">
<EditText
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="2"
android:ems="10"
android:hint="Write a message"
android:inputType="text"
android:paddingHorizontal="10dp"
android:text="" />
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:scaleType="fitCenter"
android:padding="20dp"
android:layout_marginHorizontal="10dp"
android:background="@drawable/ic_send_black_24dp"
android:onClick="sendMessage"/>
</LinearLayout>
</LinearLayout>
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.finalproject">
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.Finalproject">
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
我确实经历了同样的其他线程,但仍然无法破解。
谢谢
【问题讨论】:
-
它是
ClassNotFoundException。检查 MainActivity.java 是否按照清单中的说明正确放置。
标签: java android android-studio