2013-08-09 102 views
22

Tôi tiếp tục gặp lỗi khi tôi tạo một phần của gói và cố gắng chạy nó từ cmd.Cách chạy tệp .class là một phần của gói từ cmd?

Dưới đây là đoạn code mà làm việc sau khi sử dụng javac và sau đó java:

class HelloWorld { 
    public static void main(String[] args) { 
     System.out.println("Hello World!"); 
    } 
} 

và sau đó là mã mà không làm việc:

package com; 

class HelloWorld { 
    public static void main(String[] args) { 
     System.out.println("Hello World!"); 
    } 
} 

đem lại cho tôi lỗi này sau khi cố gắng chạy "java HelloWorld ":

Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld (wrong nam 
e: com/HelloWorld) 
    at java.lang.ClassLoader.defineClass1(Native Method) 
    at java.lang.ClassLoader.defineClass(Unknown Source) 
    at java.security.SecureClassLoader.defineClass(Unknown Source) 
    at java.net.URLClassLoader.defineClass(Unknown Source) 
    at java.net.URLClassLoader.access$100(Unknown Source) 
    at java.net.URLClassLoader$1.run(Unknown Source) 
    at java.net.URLClassLoader$1.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source) 

Đây là những gì tôi đã cố gắng thực hiện cho đến thời điểm này:

java -cp . HelloWorld 
java -cp . com.HelloWorld 
java -cp . com/HelloWorld 
java HelloWorld 
java com.HelloWorld 
java com/HelloWorld 

Hãy nhớ rằng javac trả về không có lỗi và chỉ cần xóa "gói com;" giải quyết vấn đề. Đôi khi trong các tình huống khác, tôi nhận được một lỗi nói rằng các tập tin lớp chính không thể được tìm thấy hoặc một cái gì đó dọc theo những dòng.

Tôi đang làm gì sai?

+1

'HelloWord' ở đâu? Nó có nằm trong thư mục 'com /' không? – MadProgrammer

+0

Tôi nghĩ bạn không có thư mục "com". –

+0

Nó nằm trong một thư mục được tạo bởi tôi C: \ java trong đó có vị trí HelloWorld.java và HelloWorld.class –

Trả lời

24

Giả sử bạn đã cd'd đến C:/dự án và HelloWorld.class là trong C:/dự án/com, chỉ cần gõ

java com.HelloWorld 
+0

Tệp giờ đây nằm trong C: \ com. Khi tôi thử lệnh của bạn, nó nói: –

+0

Lỗi: COuld không tìm thấy hoặc tải lớp chính com.HelloWorld –

+3

Tại thời điểm đó, bạn phải được cd vào C: \, không phải C: \ com. Nói cách khác, bạn cần phải thử chạy nó từ bên ngoài thư mục gói. – sgbj

13

gói có liên quan trực tiếp đến vị trí thư mục dự kiến ​​của tập tin .

Tức là, nếu bạn có tệp nguồn có chỉ thị gói là com, dự kiến ​​tệp sẽ nằm trong thư mục com.

Trong HelloWorld ví dụ của bạn, nó sẽ được dự kiến ​​rằng các tập tin HelloWorld.java sẽ được lưu trữ trong thư mục com, như com\HelloWorld.java

Khi bạn biên dịch các tập tin, nó sẽ tạo ra một tập tin lớp được gọi là HelloWorld.class trong thư mục com, như com\HelloWorld.class

Bằng cách này, khi Java đi tìm lớp com.HelloWorld, nó sẽ thực sự được tìm kiếm đó là đường dẫn lớp và phụ com\HelloWorld.class với nó cho đến khi nó tìm thấy tập tin lớp học của bạn hoặc chạy ra khỏi đường dẫn lớp

Ví dụ

Vì vậy, tôi sao chép HelloWorld.java (với gói) của bạn ví dụ để C:\java\com\HelloWord.java

Từ dòng lệnh, tôi đã thay đổi vào thư mục C:\java ...

C:\java>dir com 
Volume in drive C is OS 
Volume Serial Number is ####-#### 

Directory of C:\java\com 

09/08/2013 01:55 PM <DIR>   . 
09/08/2013 01:55 PM <DIR>   .. 
09/08/2013 01:55 PM    135 HelloWorld.java 

Sau đó, tôi đã biên soạn HelloWorld.java

C:\java>javac com\HelloWorld.java 

Sau đó, tôi chạy nó ...

C:\java>java com.HelloWorld 
Hello World! 

Bạn có thể muốn có một đọc qua hướng dẫn Packages

+0

Tệp hiện đang tồn tại trong C: \ com. Vấn đề là như nhau khi tôi sử dụng "java HelloWorld" và khi tôi thử "java com.HelloWorld" như @sbat gợi ý nó không thể tìm thấy hoặc tải lớp chính. –

+0

OK. Bạn đã thử ví dụ của tôi? Bạn có thể thay thế 'C: \ java \ com' cho' C: \ com' bởi vì, như tôi đã trình bày, nó hoạt động tốt ... – MadProgrammer

+0

có lỗi đánh máy. Bạn có nghĩa là để nói sống nhưng nói cuộc sống – user763410

0

Cố gắng sử dụng thư mục tuyệt đối hoặc đưa HelloWorld.class của bạn vào .. \ last_directory \ com

1. java -cp .......\last_directory com.HelloWorld 
2. java -cp .......\last_directory HelloWorld(with created com) 
3

Run chương trình từ thư mục mẹ của thư mục com.

java com.HelloWorld 
+0

ohh có. lỗi của tôi. Cảm ơn đã chỉ ra điều đó. –

+0

ĐÂY LÀ câu trả lời rất TRULY cho câu hỏi này !!!!!!!! – hyprfrcb

0

Tạo một thư mục có tên com dưới thư mục Java và đặt HelloWorld.java vào com thư mục. Sau đó, chạy lại javacjava.

0

Bạn nên biên dịch nó trước bằng cách gõ lệnh này trong CMD, cho dụ tập tin của bạn là trong c: \ thư mục:

C:\com>javac HelloWorld.java 

Sau đó bạn có thể chạy kết quả bằng cách gõ:

c:\com>java HelloWorld 
2

cú pháp là:

java -classpath /path/to/package-folder <packageName>.<MainClassName> 

Vì vậy, bạn có thể thử: java com.HelloWorld mà mong chờ com/HelloWorld.class tệp có mặt dưới dạng đường dẫn lớp theo điểm mặc định vào thư mục hiện tại (nếu không được chỉ định).

Trong trường hợp bạn đang ở thư mục khác nhau, cố gắng xác định classpath:

$ CLASSPATH=/path/to/package-folder/ java com.HelloWorld 
Hello World! 
$ java -cp /path/to/package-folder/ com.HelloWorld 
Hello World! 
$ cd /path/to/package-folder/ && java com.HelloWorld 
Hello World! 

Đối với giải thích thêm, kiểm tra: How do I run Java .class files?

0

Bạn không cần một lá cờ -cp trong khi chạy một lớp java , -cp cần thiết khi chạy một lớp hoặc một chương trình chính từ tệp nhị phân (jar). Trong khi chạy chương trình chính từ dòng lệnh, bạn cần đảm bảo rằng bạn có lớp trong cùng một cấu trúc thư mục với tên gói trong tệp java, ví dụ:

home/user/foo java com.test.className 

here classNmae class file and exist under home/user/foo/com/test 

hy vọng điều đó sẽ hữu ích.

0

Khi bạn biên dịch mã java, sử dụng -d, trong trường hợp của bạn, nó sẽ là

javac -d . com.HelloWorld.java 

Sau lệnh trên, trình biên dịch java tạo thư mục có tên "com", trong thư mục "com", bạn sẽ thấy HelloWorld của mình.lớp

Sau đó, trong thư mục giống như bạn chạy javac, chạy lệnh sau

java com.HelloWorld 
1

Giả sử các tập tin nằm ở C:/dự án/com/HelloWorld và bạn có thể thử những cách sau đây.

1. java -cp c:/projects com.HelloWorld

2. cd c:/projects
  java com.HelloWorld

nếu không có tuyên bố gói và sẽ có một chút thay đổi.

1. java -cp c:/projects/com HelloWorld

2. cd c:/projects/com
  java HelloWorld

cách khác, đường dẫn tương đối sẽ là ok.