Làm cách nào để chạy các tệp .class Java?


81

Tôi đã biên dịch một chương trình HelloWorld và tôi đang sử dụng dấu nhắc lệnh để chạy nó. Tệp .class có tên là HelloWorld2.class

Tệp nằm trong C: \ Users \ Matt \ workspace \ HelloWorld2 \ bin Đây là những gì tôi nhận được khi truy cập dấu nhắc lệnh và nhập "Java HelloWorld2":

C:\Users\Matt>Java HelloWorld2
Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld2
Caused by: java.lang.ClassNotFoundException: HelloWorld2
        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)
Could not find the main class: HelloWorld2.  Program will exit.

Tôi đã mong đợi để xem một HelloWorld được in ra. Tôi đang làm gì sai? Tôi đã cài đặt JDK.


9
Ngoài câu trả lời của Isaac cho vấn đề của bạn. Có thể là một ý kiến ​​hay khi viết "java" bằng chữ thường vì chữ hoa chỉ hoạt động trên MS Windows.
Hendrik Brummermann

Câu trả lời:


95

Bạn cần đặt classpath để tìm lớp đã biên dịch của mình:

java -cp C:\Users\Matt\workspace\HelloWorld2\bin HelloWorld2


Nó hoạt động hoàn hảo từ mọi nơi trong cấu trúc tệp của tôi. Đơn giản chỉ cần đặt đường dẫn đến lớp đã biên dịch thành -cp param và sau đó là tên lớp đã biên dịch mà không có bất kỳ đường dẫn nào. Bạn cũng có thể chạy lớp này mà không cần tham số -cp nếu bạn đang ở trong cùng một thư mục với lớp đã biên dịch của mình.
Václav

42

Để chạy tệp lớp Java từ dòng lệnh, cú pháp là:

java -classpath /path/to/jars <packageName>.<MainClassName>

nơi packageName (thường bắt đầu bằng comhoặc org) là tên thư mục nơi tệp lớp của bạn hiện diện.

Ví dụ: nếu tên lớp chính của bạn là Ứng dụng và tên gói Java của ứng dụng của bạn là com.foo.app, thì tệp lớp của bạn cần phải nằm trong com/foo/appthư mục (thư mục riêng biệt cho mỗi dấu chấm), vì vậy bạn chạy ứng dụng của mình dưới dạng:

$ java com.foo.app.App

Lưu ý: $đang chỉ ra dấu nhắc trình bao, hãy bỏ qua nó khi nhập

Nếu lớp học của bạn không có bất kỳ packagetên xác định, chỉ đơn giản là chạy như: java App.

Nếu bạn có bất kỳ phụ thuộc jar nào khác, hãy đảm bảo rằng bạn đã chỉ định tham số classpath của mình bằng -cp/ -classpathhoặc sử dụng CLASSPATHbiến trỏ đến thư mục có các tệp jar / war / ear / zip / class của bạn . Vì vậy, trên Linux, bạn có thể đặt tiền tố lệnh bằng:, CLASSPATH=/path/to/jarstrên Windows, bạn cần thêm thư mục vào biến hệ thống. Nếu không được đặt, đường dẫn lớp người dùng bao gồm thư mục hiện tại ( .).


Ví dụ thực tế

Vì chúng tôi đã tạo dự án mẫu bằng Maven như:

$ mvn archetype:generate -DgroupId=com.foo.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false 

và chúng tôi đã biên dịch dự án của mình bằng dir mvn compilecủa chúng tôi my-app/, nó sẽ tạo ra tệp lớp của chúng tôi có trong target/classes/com/foo/app/App.class.

Để chạy nó, chúng ta có thể chỉ định đường dẫn lớp thông qua -cphoặc truy cập trực tiếp vào nó, hãy xem các ví dụ bên dưới:

$ find . -name "*.class"
./target/classes/com/foo/app/App.class
$ CLASSPATH=target/classes/ java com.foo.app.App
Hello World!
$ java -cp target/classes com.foo.app.App
Hello World!
$ java -classpath .:/path/to/other-jars:target/classes com.foo.app.App
Hello World!
$ cd target/classes && java com.foo.app.App
Hello World!

Để kiểm tra lại lớp và tên gói của bạn, bạn có thể sử dụng công cụ tháo gỡ tệp lớp Java, ví dụ:

$ javap target/classes/com/foo/app/App.class
Compiled from "App.java"
public class com.foo.app.App {
  public com.foo.app.App();
  public static void main(java.lang.String[]);
}

Lưu ý: javapsẽ không hoạt động nếu tệp đã biên dịch đã bị xáo trộn.


2

Điều này có thể có nhiều ý nghĩa, nhưng phổ biến nhất là lớp chứa trong tệp không có cùng tên với chính tệp đó. Vì vậy, hãy kiểm tra xem lớp của bạn có được gọi là HelloWorld2 hay không.


0
  1. Đi đến đường dẫn bạn đã lưu tệp java mà bạn muốn biên dịch.
  2. Thay thế đường dẫn bằng cách gõ cmd và nhấn enter.
  3. Command Prompt Directory sẽ bật lên chứa tệp đường dẫn như C:/blah/blah/foldercontainJava
  4. Đi vào javac javafile.java
  5. Bấm phím Enter. Nó sẽ tự động tạo tệp lớp java

-3

Bạn phải đặt java ở dạng chữ thường và bạn phải thêm .class!

java HelloWorld2.class
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.