2011-07-12 45 views
5

Tôi đang cố gắng để chạy một ứng dụng Java mẫu từ promopt lệnh nhưng tôi nhận được lỗi sau:"Không thể tìm thấy những lớp chính"

Exception in thread "main" java.lang.NoClassDefFoundError: com/badlogic/gdx/helloworld/HelloWorldDesktop 
Caused by: java.lang.ClassNotFoundException: com.badlogic.gdx.helloworld.HelloWorldDesktop 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
Could not find the main class: com.badlogic.gdx.helloworld.HelloWorldDesktop. Program will exit. 

Lệnh Tôi đang sử dụng để thử và chạy ứng dụng này là:

java -cp .;gdx.jar;gdx-backend-jogl.jar com.badlogic.gdx.helloworld.HelloWorldDesktop 

đâu tất cả các file có liên quan trong thư mục hiện làm việc (java, .class và các file .jar)

lệnh tôi sử dụng để xây dựng các tập tin .class là như sau (có 2 tệp .java):

javac -cp gdx.jar;gdx-backend-jogl.jar HelloWorld.java HelloWorldDesktop.java 

Again này được chạy từ thư mục làm việc cùng - Nội dung của HelloWorldDesktop.java là (nhiều hơn hoặc ít hơn):

package com.badlogic.gdx.helloworld; 

public class HelloWorldDesktop { 
    public static void main (String[] argv) { 
     // Application 
    } 
} 

Tôi đang cố gắng để học Java như một nhà phát triển C#, vì vậy Tôi có một nền tảng vững chắc trong các khái niệm lập trình, toàn bộ chuỗi công cụ java hiện đang làm tôi bối rối hoàn toàn. Ngoại lệ chỉ ra rằng lớp HelloWorldDesktop không thể được tìm thấy, nhưng theo như tôi có thể nói tôi đã có tên chính xác và tôi đã thêm đúng tệp .jar vào đường dẫn lớp và vì vậy Java sẽ có thể tải lớp học.

Tại sao nó không thể tìm thấy HelloWorldDesktop?

Trả lời

7

Ngay - vấn đề là bạn đã có HelloWorldDesktop.class trong thư mục hiện hành, trong khi nó phải ở trong com/badlogic/GDX/helloworld

Bạn có thể sửa lỗi này bằng lệnh javac - chỉ cần sử dụng -d . nói nó để điều trị "." làm thư mục gốc của gói cho đầu ra.

Thông thường bạn cũng muốn cũng tổ chức mã nguồn của mình theo gói, nhưng đối với thử nghiệm "hello world" này, có thể nó không đáng giá.

+0

Cảm ơn - cả hai sử dụng '-d .' với' javac' gây ra của tôi (nếu chưa sửa đổi) lệnh để làm việc - chạy từ một thư mục cao hơn với con đường sửa đổi cũng đã làm việc. Tôi tự hỏi tại sao nguồn mẫu được lồng sâu đến thế, nó chưa bao giờ xảy ra với tôi rằng cấu trúc thư mục của nguồn quan trọng đủ để ngăn nó thực thi. – Justin

+0

Ah tôi đã chỉ cần twigged rằng '-d .' có trình biên dịch tạo ra một loạt các thư mục con cho bạn. – Justin

1

Ok, trước hết bạn cần phải biên dịch và sau đó chạy ứng dụng sử dụng hai công cụ khác nhau

Bước 1: javac.exe mà biên dịch các file java thành file .class. Ví dụ: javac.exe ProgramFolder \ * java (nơi ProgramFolder = file thư mục System)

sau đó

Bước 2:. Java.exe và đưa ra như tham số ứng dụng bạn muốn chạy trong đó có con đường, nhưng thay vào đó sử dụng "\" cho thư mục sử dụng "." và tên của lớp học Ví dụ: ProgramFolder.ClassProgram

Điều đó sẽ hiệu quả. nếu bạn cố gắng chạy Java.exe ProgramFolder \ Program.class hoặc chỉ ProgramFolder \ Program hoặc đi vào thư mục mà các tập tin lớp học và chỉ làm Java.exe Program.class nó sẽ luôn luôn cung cấp cho bạn không thể tìm thấy lỗi lớp chính.

Hãy nhìn vào 2 dòng đầu tiên của hình ảnh này http://3.bp.blogspot.com/-FO4Hmg9LrI0/Td7FoSIi_XI/AAAAAAAAF6g/FVAiP0h8CSc/s1600/fiborial_java.PNG

+0

Tôi nên làm gì nếu không có javac.exe? – Fuser97381

+1

bạn có thể chỉ có JRE. Bạn cần tải xuống JDK và cài đặt nó, nó sẽ cung cấp cho bạn trình biên dịch java javac.exe. Tải xuống từ: http://www.oracle.com/technetwork/java/javase/downloads/index.html –

Các vấn đề liên quan