Mengapa saya mendapatkan NoClassDefFoundError di Java?


530

Saya mendapatkan NoClassDefFoundErrorketika saya menjalankan aplikasi Java saya. Apa yang biasanya menjadi penyebab hal ini?


1
Saya percaya itu juga bisa terjadi jika Anda tidak menjalankan program java Anda dengan sintaks yang benar. Misalnya, Anda harus memanggil kelas Anda dari folder root bin dengan nama paket lengkap (mis. My.package.myClass). Saya akan lebih spesifik jika saya bisa tetapi saya tidak banyak orang Jawa. Saya hanya ingat mengacaukan ini beberapa kali.
frank hadder

17
@BoltClock Kita perlu pertanyaan kanonik untuk mengarahkan banyak duplikat. Mengapa ini tidak terjadi?
Raedwald

21
Sudahkah Anda mempertimbangkan untuk mengubah jawaban yang diterima sehingga jawaban yang menurut komunitas lebih berharga ada di puncak?
Martin Smith

Jawaban:


264

Ini disebabkan ketika ada file kelas yang bergantung pada kode Anda dan hadir pada waktu kompilasi tetapi tidak ditemukan saat runtime. Cari perbedaan dalam waktu kelas dan runtime class build Anda.


1
Saya memiliki kesalahan ini terjadi ketika meletakkan file sumber di bawah namespace / paket yang salah. Saya pikir saya bisa meletakkannya di mana saja, dan kompilernya senang. Ternyata saya seharusnya lebih rajin untuk runtime agar senang juga.
CenterOrbit

1
Saya mengalami kesalahan ini satu kali ketika server saya kehabisan memori selama pengunggahan file. Setiap kali saya mencoba mengunggah, saya akan mendapatkan kesalahan yang berbeda. Akhirnya dikatakan bahwa saya tidak memiliki ruang tumpukan yang cukup.
James M. Lay

81
Jawaban ini belum tentu benar dan akan menyesatkan banyak orang! Lihat jawaban yang lebih baik dari Jared di bawah ini.
Dave L.

4
@DaveL. Terima kasih! Jawaban Jared dengan 400+ upvotes ada di bawah ini! Satu jawaban dengan suara -4 naik (turun?) Jauh di atas itu. Ada sesuatu yang mencurigakan tentang logika pemesanan jawaban SO.
Saurabh Patil

1
Ini adalah pukulan panjang untuk seseorang, tetapi saya menemukan kesalahan ini karena kelas yang dimaksud berisi SimpleDateFormat yang diinisialisasi dengan karakter yang tidak valid (saya memiliki T di tengah alih-alih 'T').
Ryan D

818

Meskipun ada kemungkinan bahwa ini disebabkan oleh ketidakcocokan jalur kelas antara waktu kompilasi dan waktu berjalan, itu tidak selalu benar.

Penting untuk menjaga dua atau tiga pengecualian yang berbeda di kepala kita dalam kasus ini:

  1. java.lang.ClassNotFoundException Pengecualian ini menunjukkan bahwa kelas tidak ditemukan di classpath. Ini menunjukkan bahwa kami mencoba memuat definisi kelas, dan kelas tidak ada di classpath.

  2. java.lang.NoClassDefFoundError Pengecualian ini menunjukkan bahwa JVM mencari dalam struktur data definisi kelas internal untuk definisi kelas dan tidak menemukannya. Ini berbeda dengan mengatakan bahwa itu tidak dapat diambil dari classpath. Biasanya ini menunjukkan bahwa kami sebelumnya mencoba memuat kelas dari classpath, tetapi gagal karena beberapa alasan - sekarang kami mencoba menggunakan kelas lagi (dan karenanya perlu memuatnya, karena gagal terakhir kali), tetapi kami Kami bahkan tidak akan mencoba memuatnya, karena kami gagal memuatnya lebih awal (dan cukup curiga bahwa kami akan gagal lagi). Kegagalan sebelumnya bisa berupa ClassNotFoundException atau ExceptionInInitializerError (menunjukkan kegagalan dalam blok inisialisasi statis) atau sejumlah masalah lainnya. Intinya adalah, NoClassDefFoundError belum tentu merupakan masalah classpath.


30
Terima kasih telah menyebutkan penyebab NoClassDefFoundError, ini banyak membantu saya! Dalam kasus saya, ExceptionInInitializerError dilemparkan sebelumnya, itulah cara saya mengetahui tentang kesalahan dalam blok statis.
Thomas

@ Jared, Ketika saya mendapatkan Error: Could not find or load main class, itu akan diklasifikasikan di bawah kategori kesalahan yang mana?
Vikram

@ Pops: Membuat bahasa lebih verbose untuk menentukan objek dari kata kerja "try" :)
Jared

1
@ Vikram the "tidak dapat menemukan atau memuat kelas utama" bukan pengecualian Java, itu disebabkan oleh peluncur (yang memeriksa JAR dan atribut manifes utama).
eckes

2
ClassNotFoundException juga dilemparkan ketika kelas memiliki inisialisasi statis yang melempar kesalahan atau pengecualian. Mereka mungkin seharusnya memilih nama yang berbeda untuk acara itu.
coladict

125

Berikut adalah kode untuk diilustrasikan java.lang.NoClassDefFoundError. Silakan lihat jawaban Jared untuk penjelasan terperinci.

NoClassDefFoundErrorDemo.java

public class NoClassDefFoundErrorDemo {
    public static void main(String[] args) {
        try {
            // The following line would throw ExceptionInInitializerError
            SimpleCalculator calculator1 = new SimpleCalculator();
        } catch (Throwable t) {
            System.out.println(t);
        }
        // The following line would cause NoClassDefFoundError
        SimpleCalculator calculator2 = new SimpleCalculator();
    }

}

SimpleCalculator.java

public class SimpleCalculator {
    static int undefined = 1 / 0;
}

3
Dan alasannya adalah bahwa setelah percobaan pertama jvm sudah tahu itu tidak akan berhasil dan membuang pengecualian yang berbeda untuk kedua kalinya?
ikamen

@ikamen Rupanya itu telah disimpan di suatu tempat inisialisasi kelas yang gagal SimpleCalculatorsetelah membagi dengan nol? Apakah seseorang memiliki referensi ke dokumentasi resmi untuk perilaku ini?
ᴠɪɴᴄᴇɴᴛ

4
@ PhilipRego Tidak yakin apa yang Anda maksud dengan NoClassDefFoundError 'murni'. Pertama kali new SimpleCalculator()dipanggil, Anda mendapatkan ExceptionInInitializerError dengan disebabkan oleh ArithmeticException. Kali kedua Anda menelepon new SimpleCalculator()Anda mendapatkan NoClassDefFoundError semurni yang lainnya. Intinya adalah Anda bisa mendapatkan NoClassDefFoundError karena alasan selain SimpleCalculator.class tidak berada di classpath saat runtime.
harperska

36

NoClassDefFoundError Di Jawa

Definisi:

  1. Java Virtual Machine tidak dapat menemukan kelas tertentu pada saat runtime yang tersedia pada waktu kompilasi.

  2. Jika suatu kelas hadir selama waktu kompilasi tetapi tidak tersedia dalam java classpath selama runtime.

masukkan deskripsi gambar di sini

Contoh:

  1. Kelas tidak ada di Classpath, tidak ada cara pasti untuk mengetahuinya, tetapi berkali-kali Anda hanya perlu melihat untuk mencetak System.getproperty ("java.classpath") dan itu akan mencetak classpath dari sana Anda setidaknya bisa mendapatkan ide classpath runtime Anda yang sebenarnya.
  2. Contoh sederhana dari NoClassDefFoundError adalah kelas milik file JAR yang hilang atau JAR tidak ditambahkan ke classpath atau kadang-kadang nama jar telah diubah oleh seseorang seperti dalam kasus saya salah satu kolega saya telah mengubah tibco.jar menjadi tibco_v3.jar dan programnya adalah gagal dengan java.lang.NoClassDefFoundError dan saya bertanya-tanya apa yang salah.

  3. Coba jalankan dengan opsi -classpath secara eksplisit dengan classpath yang menurut Anda akan bekerja dan jika itu berfungsi maka itu pertanda singkat bahwa seseorang sedang menimpa classpath java.

  4. Masalah izin pada file JAR juga dapat menyebabkan NoClassDefFoundError di Java.
  5. Typo on XML Configuration juga dapat menyebabkan NoClassDefFoundError di Java.
  6. ketika kelas terkompilasi Anda yang didefinisikan dalam sebuah paket, tidak hadir dalam paket yang sama saat memuat seperti dalam kasus JApplet itu akan melempar NoClassDefFoundError di Jawa.

Solusi yang memungkinkan:

  1. Kelas tidak tersedia di Java Classpath.
  2. Jika Anda bekerja di lingkungan J2EE selain visibilitas Kelas di antara beberapa Classloader juga dapat menyebabkan java.lang.NoClassDefFoundError, lihat contoh dan bagian skenario untuk diskusi terperinci.
  3. Periksa java.lang.ExceptionInInitializerError di file log Anda. NoClassDefFoundError karena kegagalan inisialisasi statis cukup umum.
  4. Karena NoClassDefFoundError adalah subkelas dari java.lang.LinkageError juga dapat muncul jika salah satu dari dependensi seperti pustaka asli mungkin tidak tersedia.
  5. Skrip start-up apa pun mengesampingkan variabel lingkungan Classpath.
  6. Anda mungkin menjalankan program Anda menggunakan perintah jar dan kelas tidak didefinisikan dalam atribut ClassPath file manifes.

Sumber:

3 cara untuk menyelesaikan NoClassDefFoundError

java.lang.NoClassDefFoundError Pola masalah


1
Jawaban yang bagus Saya pikir saya sudah mencoba semua yang Anda sarankan dan masih memiliki masalah itu. Saya dapat mengecualikan beberapa dari ini karena toples yang bekerja dengan pegas, tetapi tampaknya tidak disukai oleh java.sql (dalam kasus saya driver db getah untuk Hana).
JE Carter II

Sebenarnya disebut System.getproperty ("java.class.path")
RIJIK

33

Saya telah menemukan bahwa kadang-kadang saya mendapatkan kesalahan NoClassDefFound ketika kode dikompilasi dengan versi kelas yang tidak kompatibel yang ditemukan saat runtime. Contoh spesifik yang saya ingat adalah dengan pustaka sumbu apache. Sebenarnya ada 2 versi di classpath runtime saya dan mengambil versi yang ketinggalan zaman dan tidak kompatibel dan bukan yang benar, menyebabkan kesalahan NoClassDefFound. Ini ada di aplikasi baris perintah di mana saya menggunakan perintah yang mirip dengan ini.

set classpath=%classpath%;axis.jar

Saya bisa mendapatkannya untuk mengambil versi yang tepat dengan menggunakan:

set classpath=axis.jar;%classpath%;

4
Punya masalah yang sama. Ternyata saya mengkompilasi file perang dengan Java7, tetapi instalasi Tomcat saya menggunakan Java6. Saya harus memperbarui variabel lingkungan saya
duvo

4
Jika ini terjadi seperti itu maka saya akan mengatakan Java berantakan. +2 jika ini benar. Belum dapat memverifikasi ini. Jika terbukti benar akan melakukan +1 lagi (Dalam komentar)
supernova

7

Ini adalah solusi terbaik yang saya temukan sejauh ini.

Misalkan kita memiliki paket bernama org.mypackagemengandung kelas:

  • HelloWorld (kelas utama)
  • Kelas Dukungan
  • UtilClass

dan file-file yang mendefinisikan paket ini disimpan secara fisik di bawah direktori D:\myprogram(di Windows) atau /home/user/myprogram(di Linux).

Struktur file akan terlihat seperti ini: masukkan deskripsi gambar di sini

Ketika kita memanggil Java, kita tentukan nama aplikasi untuk menjalankan: org.mypackage.HelloWorld. Namun kami juga harus memberi tahu Java ke mana harus mencari file dan direktori yang mendefinisikan paket kami. Jadi untuk meluncurkan program, kita harus menggunakan perintah berikut: masukkan deskripsi gambar di sini


6

Saya menggunakan Spring Framework dengan Maven dan menyelesaikan kesalahan ini dalam proyek saya.

Ada kesalahan runtime di kelas. Saya membaca properti sebagai integer, tetapi ketika membaca nilai dari file properti, nilainya dua kali lipat.

Spring tidak memberi saya jejak stack penuh di mana runtime gagal. Itu hanya mengatakan NoClassDefFoundError. Tetapi ketika saya mengeksekusinya sebagai aplikasi Java asli (mengeluarkannya dari MVC), ia memberikan ExceptionInInitializerErrormana penyebab sebenarnya dan bagaimana saya melacak kesalahannya.

Jawaban @ xli memberi saya wawasan tentang apa yang mungkin salah dalam kode saya.


1
Hal yang sama terjadi pada saya ketika memprogram Servlet ( NoClassDefFoundErrorsebenarnya disebabkan oleh ExceptionInInitalizerError, yang disebabkan oleh DateTimeParseException). Agak menyesatkan, bukan? Saya tahu mereka mungkin memiliki alasan untuk membuatnya seperti itu, tetapi akan sangat menyenangkan untuk memiliki setidaknya petunjuk kecil, itu NoClassDefFoundErroradalah hasil dari pengecualian lain, tanpa perlu menyimpulkannya. Hanya melempar ExceptionInInitializerErrorlagi akan jauh lebih jelas. Terkadang hubungan antara keduanya mungkin tidak begitu jelas.
Bartłomiej Zieliński

5

Saya mendapatkan NoClassFoundError ketika kelas yang dimuat oleh kelas runtime tidak dapat mengakses kelas yang sudah dimuat oleh java rootloader. Karena pemuat kelas yang berbeda berada dalam domain keamanan yang berbeda (menurut java), jvm tidak akan mengizinkan kelas yang sudah dimuat oleh rootloader untuk diselesaikan dalam ruang alamat pemuat runtime.

Jalankan program Anda dengan 'java -javaagent: tracer.jar [ARGS java ANDA]'

Ini menghasilkan output yang menunjukkan kelas yang dimuat, dan loader env yang memuat kelas. Ini sangat membantu melacak mengapa kelas tidak dapat diselesaikan.

// ClassLoaderTracer.java
// From: https://blogs.oracle.com/sundararajan/entry/tracing_class_loading_1_5

import java.lang.instrument.*;
import java.security.*;

// manifest.mf
// Premain-Class: ClassLoadTracer

// jar -cvfm tracer.jar manifest.mf ClassLoaderTracer.class

// java -javaagent:tracer.jar  [...]

public class ClassLoadTracer 
{
    public static void premain(String agentArgs, Instrumentation inst) 
    {
        final java.io.PrintStream out = System.out;
        inst.addTransformer(new ClassFileTransformer() {
            public byte[] transform(ClassLoader loader, String className, Class classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) throws IllegalClassFormatException {

                String pd = (null == protectionDomain) ? "null" : protectionDomain.getCodeSource().toString();
                out.println(className + " loaded by " + loader + " at " + new java.util.Date() + " in " + pd);

                // dump stack trace of the thread loading class 
                Thread.dumpStack();

                // we just want the original .class bytes to be loaded!
                // we are not instrumenting it...
                return null;
            }
        });
    }
}

1
Tautan sudah mati. Coba versi yang diarsipkan: web.archive.org/web/20131216000019/https://blogs.oracle.com/…
avgvstvs

5

Satu kasus menarik di mana Anda mungkin melihat banyak NoClassDefFoundErrorsadalah ketika Anda:

  1. throwa RuntimeExceptiondi staticblok kelas AndaExample
  2. Mencegat itu (atau jika itu tidak masalah seperti itu dilemparkan ke dalam test case )
  3. Cobalah untuk membuat turunan dari kelas ini Example

static class Example {
    static {
        thisThrowsRuntimeException();
    }
}

static class OuterClazz {

    OuterClazz() {
        try {
            new Example();
        } catch (Throwable ignored) { //simulating catching RuntimeException from static block
            // DO NOT DO THIS IN PRODUCTION CODE, THIS IS JUST AN EXAMPLE in StackOverflow
        }

        new Example(); //this throws NoClassDefFoundError
    }
}

NoClassDefErrorakan dibuang disertai dengan ExceptionInInitializerErrordari blok statis RuntimeException.


Ini adalah kasus yang sangat penting ketika Anda melihat NoClassDefFoundErrorsdi UIT UNIT Anda .

Dengan cara Anda "berbagi" staticeksekusi blok antara tes, tetapi inisial ExceptionInInitializerErrorhanya dalam satu kasus uji. Yang pertama yang menggunakan Examplekelas yang bermasalah . Kasus uji lain yang menggunakan Examplekelas hanya akan melempar NoClassDefFoundErrors.


4
Ini adalah nasihat yang sangat berguna dalam kehidupan nyata. Saya baru saja mengalami situasi yang sama dengan inisialisasi atribut kelas. Anda hanya memiliki satu kali kesempatan untuk melihat masalah aktual di log. Setelah kelas dimuat (atau dicoba pula), Anda harus memulai kembali semuanya.
DailyFrankPeter

4

Teknik di bawah ini membantu saya berkali-kali:

System.out.println(TheNoDefFoundClass.class.getProtectionDomain().getCodeSource().getLocation());

di mana TheNoDefFoundClass adalah kelas yang mungkin "hilang" karena preferensi untuk versi yang lebih lama dari perpustakaan yang sama yang digunakan oleh program Anda. Ini paling sering terjadi pada kasus-kasus, ketika perangkat lunak klien sedang digunakan ke wadah yang dominan, dipersenjatai dengan classloader sendiri dan berton-ton versi kuno lib paling populer.



1

Saya memperbaiki masalah saya dengan menonaktifkan preDexLibraries untuk semua modul:

dexOptions {
        preDexLibraries false
        ...

1

NoClassDefFoundErrorjuga dapat terjadi ketika penginisialisasi statis mencoba memuat kumpulan sumber daya yang tidak tersedia di runtime, misalnya file properti yang dicoba untuk dimuat oleh kelas yang terpengaruh dari META-INFdirektori, tetapi tidak ada di sana. Jika Anda tidak menangkap NoClassDefFoundError, kadang-kadang Anda tidak akan dapat melihat jejak tumpukan penuh; untuk mengatasinya Anda dapat menggunakan catchklausa untuk Throwable:

try {
    // Statement(s) that cause the affected class to be loaded
} catch (Throwable t) {
    Logger.getLogger("<logger-name>").info("Loading my class went wrong", t);
}

Ini salah. Sumber daya yang hilang tidak akan memberi Anda kesalahan ini. Anda hanya akan mendapatkannya jika kelasnya hilang.
Stephen C

@StephenC Mungkin saya harus lebih menekankan bagian itu, tetapi saya menulis for example a properties file that the affected class tries to load from the META-INF directory. Ini sebenarnya terjadi pada saya dan saya dapat menyelesaikannya NoClassDefFoundErrordengan menambahkan file properti yang hilang. Saya menambahkan jawaban ini tepat karena orang tidak akan mengharapkan kesalahan ini dalam keadaan yang disebutkan.
ᴠɪɴᴄᴇɴᴛ

1
Anda telah melewatkan sesuatu yang sangat penting dalam penjelasan Anda, karena satu-satunya cara file sumber daya yang hilang dapat memicu pengecualian itu adalah jika Anda mencoba memuat file sumber daya dalam staticinisialisasi ... yang memicu pengecualian yang tidak dicentang dan menyebabkan kelas init gagal. Setiap pengecualian yang tidak dicentang yang merambat dari inisialisasi statis akan melakukan itu.
Stephen C

Jika saya salah (yaitu ini bukan karena staticinisialisasi gagal ), saya akan tertarik untuk melihat contoh aktual (yaitu MCVE) yang menunjukkan perilaku.
Stephen C

1
@StephenC Anda memang benar, meskipun :( Saya mencari kasus di mana saya menemukan masalah ini dan itu memang melibatkan penginisialisasi statis yang mencoba memuat bundel sumber daya. Saya akan menambah / memperbaiki deskripsi penyebabnya. Terima kasih telah menunjukkan ini. keluar
ᴠɪɴᴄᴇɴᴛ

1

Saya mendapat kesalahan ini ketika saya menambahkan Maven dependensi dari modul lain ke proyek saya, masalah ini akhirnya diselesaikan dengan menambahkan -Xss2mopsi JVM program saya (Ini satu megabyte secara default sejak JDK5.0). Diyakini program tidak memiliki cukup stack untuk memuat kelas.


0

Jika seseorang datang ke sini karena java.lang.NoClassDefFoundError: org/apache/log4j/Loggerkesalahan, dalam kasus saya itu diproduksi karena saya menggunakan log4j 2 (tapi saya tidak menambahkan semua file yang menyertainya), dan beberapa perpustakaan dependensi menggunakan log4j 1. Solusinya adalah menambahkan Log4j 1.x bridge: tabung log4j-1.2-api-<version>.jaryang datang dengan log4j 2. Info lebih lanjut dalam migrasi log4j 2 .


0

Dua salinan checkout berbeda dari proyek yang sama

Dalam kasus saya, masalahnya adalah ketidakmampuan Eclipse untuk membedakan antara dua salinan berbeda dari proyek yang sama. Saya punya satu terkunci di trunk (kontrol versi SVN) dan yang lain bekerja di satu cabang sekaligus. Saya mencoba satu perubahan dalam copy pekerjaan sebagai kasus uji JUnit, yang termasuk mengekstraksi kelas dalam pribadi menjadi kelas publik sendiri dan ketika sedang bekerja, saya membuka salinan lain dari proyek untuk melihat-lihat beberapa lainnya. bagian dari kode yang perlu diubah. Pada titik tertentu,NoClassDefFoundError muncul keluhan bahwa kelas batin pribadi tidak ada di sana; mengklik ganda pada jejak tumpukan membawa saya ke file sumber dalam salinan proyek yang salah.

Menutup salinan trunk proyek dan menjalankan test case sekali lagi menghilangkan masalah.


0

Kesalahan ini dapat disebabkan oleh persyaratan versi Java yang tidak dicentang .

Dalam kasus saya, saya dapat menyelesaikan kesalahan ini, sambil membangun proyek open-source profil tinggi, dengan beralih dari Java 9 ke Java 8 menggunakan SDKMAN! .

sdk list java
sdk install java 8u152-zulu
sdk use java 8u152-zulu

Kemudian lakukan instalasi bersih seperti dijelaskan di bawah ini.


Saat menggunakan Maven sebagai alat build Anda, terkadang membantu - dan biasanya memuaskan, untuk melakukan build 'install' yang bersih dengan pengujian yang dinonaktifkan .

mvn clean install -DskipTests

Sekarang semuanya telah dibangun dan diinstal, Anda dapat melanjutkan dan menjalankan tes.

mvn test


0

Bisa juga karena Anda menyalin file kode dari IDE dengan nama paket tertentu dan Anda ingin mencoba menjalankannya menggunakan terminal. Anda harus menghapus nama paket dari kode terlebih dahulu. Ini terjadi pada saya.


0

Dalam kasus saya, saya mendapatkan kesalahan ini karena ketidakcocokan dalam versi JDK. Ketika saya mencoba menjalankan aplikasi dari Intelij itu tidak berfungsi tetapi kemudian menjalankannya dari baris perintah bekerja. Ini karena Intelij berusaha menjalankannya dengan Java 11 JDK yang telah diatur tetapi pada baris perintah ia menjalankan dengan Java 8 JDK. Setelah mengalihkan pengaturan itu di bawah File> Struktur Proyek> Pengaturan Proyek> Project SDK, itu berhasil bagi saya.


0

Semua orang berbicara di sini tentang beberapa hal konfigurasi Java, masalah JVM dll., Dalam kasus saya kesalahannya tidak terkait dengan topik ini sama sekali dan memiliki alasan yang sangat sepele dan mudah dipecahkan: Saya memiliki anotasi yang salah pada titik akhir di Pengontrol saya ( Aplikasi Spring Boot).


0

Saya punya masalah menarik dengan NoClassDefFoundError di JavaEE yang bekerja dengan server Liberty. Saya menggunakan adaptor sumber daya IMS dan server.xml saya sudah memiliki adaptor sumber daya untuk imsudbJXA.rar. Ketika saya menambahkan adaptor baru untuk imsudbXA.rar, saya akan mulai mendapatkan kesalahan ini misalnya objek untuk DLIException, IMSConnectionSpec atau SQLInteractionSpec. Saya tidak tahu mengapa tetapi saya menyelesaikannya dengan membuat server.xml baru untuk pekerjaan saya hanya menggunakan imsudbXA.rar. Saya yakin menggunakan beberapa adaptor sumber daya di server.xml baik-baik saja, saya tidak punya waktu untuk melihatnya.


-1

Java tidak dapat menemukan kelas A di runtime. Kelas A dalam proyek pakar ArtClient dari ruang kerja yang berbeda. Jadi saya mengimpor ArtClient ke proyek Eclipse saya. Dua proyek saya menggunakan ArtClient sebagai ketergantungan. Saya mengubah referensi perpustakaan ke referensi proyek untuk yang ini (Build Path -> Configure Build Path).

Dan masalahnya hilang.


-1

Saya memiliki masalah yang sama, dan saya siap untuk beberapa jam.

Saya menemukan solusinya. Dalam kasus saya, ada metode statis yang ditentukan karena itu. JVM tidak dapat membuat objek lain dari kelas itu.

Sebagai contoh,

private static HttpHost proxy = new HttpHost(proxyHost, Integer.valueOf(proxyPort), "http");

-6

Saya mendapat pesan ini setelah menghapus dua file dari pustaka SRC, dan ketika saya membawanya kembali saya terus melihat pesan kesalahan ini.

Solusi saya adalah: Restart Eclipse. Sejak itu saya tidak melihat pesan ini lagi :-)


4
Itu dijelaskan oleh jawaban yang paling banyak dipilih, ketika Anda pertama kali dikompilasi, file-file itu ada di sana, lalu Anda menghapus beberapa file, kelas-kelas itu dihapus, jadi saat runtime, Anda mendapatkan ClassNotFound, lalu Anda kembalikan, tetapi masih Eclipse tidak perhatikan sehingga kelas yang dihasilkan masih hilang, tetapi setelah Anda memulai ulang Eclipse, ruang kerja disegarkan dan kelas kembali tersedia, tetapi secara umum ini bukan solusi atau solusi, solusi menemukan kelas / tabung mana yang hilang dalam runtime jalan setapak kelas.
Jose Manuel Gomez Alvarez

-7

Pastikan ini cocok di module:appdan module:lib:

android {
    compileSdkVersion 23
    buildToolsVersion '22.0.1'
    packagingOptions {
    }

    defaultConfig {
        minSdkVersion 17
        targetSdkVersion 23
        versionCode 11
        versionName "2.1"
    }

3
Bagaimana cara solusi Anda relevan dengan masalah umum ini?
Taavi Ilves

Konfigurasi sampel tidak seimbang (tiga {sdan dua }). Bisakah kamu memperbaikinya?
Peter Mortensen
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.