SORU
7 AĞUSTOS 2013, ÇARŞAMBA


&Quot;ya da ana sınıfı bulmak yük" anlamına Gelebilir ne iş yapar?

Yeni Java geliştiriciler deneyim programları hata mesajı ile çalıştırmak için başarısız olduğunu yaygın bir sorun: Could not find or load main class ...

Bu, neden ve nasıl bunu düzeltmek gerekir size ne ifade ediyor?

CEVAP
7 AĞUSTOS 2013, ÇARŞAMBA


java <class-name> komut sözdizimi

İlk olarak, bir program java (javaw) komutunu kullanarak başlatmak için doğru şekilde anlamak gerekir.

Normal sözdizimi1bu:

    java [ <option> ... ] <class-name> [<argument> ...]

nerede <option> bir komut satırı seçeneği (ile başlayan "-" karakteri), <class-name> bir tam olarak nitelenmiş Java sınıfı adını ve <argument> rasgele bir komut satırı bağımsız değişkeni alır geçirilen uygulama.
1 - "" JAR dosyaları olan Ben alt kısmında anlatacağız. yürütülebilir için ikinci bir sözdizimi Vardır

Tam code geleneksel olarak Java kaynak kodu; örneğin yazılır

    packagename.packagename2.packagename3.ClassName

Ancak java komut bazı sürümleri dönemlerde; örneğin yerine eğik çizgi kullanmak için izin verir

    packagename/packagename2/packagename3/ClassName

dosya bir yol gibi görünüyor, ama değil. Bu dönem dikkat edintam olarak code niteliklistandart Java terminoloji ... ben sadece seni şaşırtmak için yapılmış bir şey değil :-)

Burada java bir komut nasıl olması gerektiğine bir örnek:

    java -Xmx100m com.acme.example.ListUsers fred joe bert

Yukarıdaki java komut şu: neden oluyor

  1. com.acme.example.ListUsers sınıf derlenmiş sürümünü arayın.
  2. Sınıf yük.
  3. Sınıf imza static void main(String[]) 26 *bir yöntem olup olmadığını kontrol edin.
  4. Bu yöntem, komut satırı argümanları iletme çağrısı ("fred", "joe", "bert") String[].

Java edemiyor sınıfı bulmak neden nedenleri

Mesajı "bulunamadı veya ana sınıfı ...", bu ilk adım başarısız oldu anlamına gelir. yük olsun java komut sınıfı bulmak mümkün değildi. Ve gerçekten de, " ... " mesajı olacaktam nitelikli bir sınıf adıjava arıyor.

Neden sınıf bulmak mümkün olabilir mi? Temelde iki ana neden vardır:

İlk olası nedeni yanlış sınıfa adını vermiş olabilir. (Veya ... sınıf adı, yanlış şeklinde. ama sağ) Örnek dikkate alındığında, yukarıda, çeşitli buradayanlış yollarsınıf adını belirlemek için:

  • Örnek 1 - basit bir sınıf adı:

    java ListUser
    

    Sınıf com.acme.example gibi bir paket bildirirken o zaman tam code kullanmanız gerekirdahilpaketi java komutu; örneğin adı

    java com.acme.example.ListUser
    
  • Örnek 2 - bir sınıf adı yerine: dosya adı veya yol adı

    java ListUser.class
    java com/acme/example/ListUser.class
    
  • #3 - bir sınıf adı kasa ile örnek yanlış:

    java com.acme.example.listuser
    
  • Örnek 4 - bir yazım hatası

    java com.acme.example.mistuser
    

İkinci olası nedeni, sınıf adının doğru olduğunu, ama java komut olamaz sınıfı bulmak. Bunu anlamak için, bu kavramı anlamak gerekir"". sınıf Bu açıklanmıştıriyiOracle Dokümantasyon: tarafından

Yani ... eğer doğru sınıfı belirtilen ad varsa, kontrol etmek için bir sonraki şey doğru sınıf belirtildi

  1. Üç belgeleri yukarıda bağlantılı bilgi edinin. (Evet ... onları OKUYUN. Bir Java programcısı önemlidiranlarJava sınıf yolu mekanizmalarının nasıl çalıştığını en azından temel.)
  2. java komutunu çalıştırdığınızda, komut satırı ve / veya yürürlükte olan SINIF ortam değişkeni bak. Dizin adları ve JAR dosya adları doğru olup olmadığını kontrol edin.
  3. Eğer varsa oradagörecelionlar java komutu çalıştırdığınızda etkisi olduğu doğru ... geçerli dizinden gidermek bu sınıf, check-in yol adlarını.
  4. Sınıf (hata iletisinde belirtilen) yer alan olup olmadığını kontrol edinetkilisınıf.

Ek Notlar:

  1. Sınıf, bir dizin koyduğunuzda, notionally nitelikli ad alanı köküne karşılık gelir. Sınıflar altında kök dizin yapısı yer alıyorbir yol adı tam adı eşleme ile. Yani örneğin, "/usr/local/acme/sınıflar" sınıf yol, o zaman JVM görünüyor için bir sınıf adı com.acme.example.Foon, o-ecek bakmak için ".sınıf" bu dosya yol adı:

        /usr/local/acme/classes/com/acme/example/Foon.class
    

    Eğer "/usr/local/örnek" sınıf, JVM sınıfı bulmak mümkün olmazdı./acme//sınıflar com/acme deseydik

  2. Sınıf da buna dahil edilmesi gerekiyordiğer(sistem dışı) dersleri uygulama. duruma göre değişir (Sistem dersleri otomatik olarak bulunur ve nadiren böyle bir şey için endişelenmene gerek.)

java -jar <jar file> sözdizimi

Alternatif "" JAR dosyalarını aşağıdaki gibidir: . yürütülebilir için kullanılan sözdizimi

    java [ <option> ... ] -jar <jar-file-name> [<argument> ...]

örneğin

    java -Xmx100m -jar /usr/local/acme-example/listuser.jar fred

Bu durumda noktadan giriş sınıfı (47* yani *) ve sınıf ismi JAR dosyasının APAÇIK belirtilmiştir.

Ides

Tipik bir Java IDE çocuk bir JVM içinde IDE Java uygulamaları JVM çalışan kendisi için ya da destek var. BugenellikleIDE kendi mekanizmaları çalışma zamanı sınıf inşa, ana sınıfı tanımlamak ve java komut satırı oluşturmak için kullanır, çünkü bu özel durum, muaf.

Ancak yine de bu durum, eğer IDE arkasından bir şeyler söylemek gerçekleşmesi Olası şeyler kırmak için. Örneğin, önceden ayarlanmış bir Uygulama Başlatıcı için Java uygulaması, Eclipse, ve daha sonra taşınan JAR dosyası içeren "ana" sınıfı farklı bir yerde dosya sistemiEclipse söylemedenEclipse farkında olmadan yanlış bir sınıf ile JVM başlatacağını duyurdu.

Eğer bir IDE bu sorun alırsanız Kısacası, IDE devlet ve kırık proje başvuruları veya launcher yapılandırmaları bayat gibi şeyler için kontrol edin.

Diğer Kaynaklar

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • InfinityWard

    InfinityWard

    19 EYLÜL 2006
  • RomanAtwood

    RomanAtwood

    18 Kasım 2009
  • xCraash

    xCraash

    6 Temmuz 2012