Computer >> Máy Tính >  >> Xử lý sự cố >> Lỗi Windows

Khắc phục:Không thể tìm thấy hoặc tải lớp chính

Lỗi ‘ Không thể tìm thấy hoặc tải lớp chính 'Xảy ra khi sử dụng lệnh java trong dấu nhắc lệnh để khởi chạy chương trình Java bằng cách chỉ định tên lớp trong thiết bị đầu cuối. Lý do tại sao điều này xảy ra chủ yếu là do lỗi lập trình của người dùng trong khi khai báo lớp.

Khắc phục:Không thể tìm thấy hoặc tải lớp chính

Như đã đề cập trước đó, lỗi này hầu hết không liên quan đến hệ thống và người dùng mắc lỗi trong một số trường hợp như hình dưới đây. Trước khi tiếp tục, chúng tôi giả định rằng bạn đã có kiến ​​thức cơ bản về ngôn ngữ lập trình Java và cách thức hoạt động của ngôn ngữ này.

Nguyên nhân nào gây ra lỗi "Không thể tìm thấy hoặc tải lớp chính" trong Java?

Thông báo "Không thể tìm thấy hoặc tải lớp chính" có nghĩa là bước đầu tiên của công cụ Java tìm nạp lớp để thực thi đã không thành công. Lệnh java không thể định vị lớp tại đúng thư mục.

Trong một số trường hợp, bạn phải thêm đường dẫn tệp chính xác và trỏ thiết bị đầu cuối Java đến vị trí chính xác. Vì bạn đang thực hiện lệnh từ đầu cuối dòng lệnh, máy tính không biết lớp sẽ được tìm thấy ở đâu hoặc nó nằm ở đâu. Trong IDE được nhắm mục tiêu, đây không phải là vấn đề vì IDE giữ một con trỏ trỏ tới thư mục làm việc hiện tại.

Cú pháp ‘java ’ là gì?

Trước khi bắt đầu khắc phục sự cố tại sao thiết bị đầu cuối lại trả về lỗi cho chúng ta khi cố gắng thực thi, trước tiên chúng ta cần xem cú pháp của lệnh. Nếu bạn không sử dụng đúng cú pháp, bạn sẽ chắc chắn gặp phải lỗi này.

Cú pháp bình thường của lệnh như sau:

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

Ở đây

Ví dụ về một lệnh hợp lệ là:

java -Xmx100m com.acme.example.ListAppuals kevin arrows bart

Lệnh trên sẽ làm cho lệnh java thực hiện các hoạt động sau:

  • Nó sẽ tìm kiếm phiên bản đã biên dịch của lớp ‘ com.acme.example.ListAppuals '.
  • Sau khi tìm kiếm, nó sẽ tải lớp.
  • Tiếp theo, khi lớp được tải, lớp sẽ được tìm kiếm một phương thức ‘main’ với chữ ký hợp lệ, các bổ ngữ và kiểu trả về. Một lớp chính mẫu sẽ giống như sau:
public static void main(String[])
  • Phương thức sẽ được gọi với các đối số "kevin", "arrows" và "bart" dưới dạng chuỗi [].

Cách khắc phục "Không thể tìm thấy hoặc tải lớp chính"

Giải pháp 1:Kiểm tra đối số tên lớp

Sai lầm phổ biến nhất mà người dùng mắc phải là họ cung cấp tên lớp sai làm đối số (hoặc tên lớp đúng là một dạng sai). Vì chúng ta đang khai báo các tham số trên dòng lệnh, rất có thể bạn sẽ chuyển đối số tên lớp ở dạng sai. Sau đây, chúng tôi sẽ liệt kê tất cả các trường hợp có thể xảy ra mà bạn có thể mắc sai lầm.

  • Viết một tên lớp đơn giản . Nếu bạn khai báo lớp trong một gói, chẳng hạn như ‘com.acme.example’, bạn phải sử dụng tên lớp đầy đủ bao gồm gói trong lệnh Java.
java com.acme.example.ListAppuals

thay vì

java ListAppuals
  • Bạn nên khai báo tên lớp thay vì khai báo tên tệp hoặc tên đường dẫn. Java không tìm nạp lớp nếu bạn khai báo tên đường dẫn / tên tệp cho nó. Không chính xác các mục nhập bao gồm những điều sau:
java ListAppuals.class

java com/acme/example/ListAppuals.class
  • Vỏ bọc cần được xem xét. Các lệnh Java phân biệt chữ hoa chữ thường và nếu bạn mắc lỗi dù chỉ một ký tự, bạn sẽ không thể tải lớp chính. Ví dụ về sai lầm không chính xác là:
java com.acme.example.listappuals
  • Bạn không nên khai báo một tên tệp nguồn . Giống như đã đề cập trước đó, bạn chỉ cần khai báo lớp theo đúng định dạng tên lớp đầy đủ. Ví dụ về một sai lầm là:
java ListAppuals.java
  • Lỗi này cũng sẽ xảy ra nếu bạn nhập sai hoặc quên viết hoàn toàn tên lớp .

Nếu bạn mắc phải bất kỳ lỗi nào không đáng có trong việc khai báo tên lớp, hãy đảm bảo rằng bạn đã sửa nó và sau đó thử khởi chạy chương trình.

Giải pháp 2:Kiểm tra classpath

Nếu bạn đã khai báo tên lớp chính xác nhưng vẫn hiển thị lỗi, rất có thể lệnh java không thể tìm thấy tên lớp được chỉ định tại đường dẫn. Đường dẫn classpath là một đường dẫn trong đó thời gian chạy Java tìm kiếm các tệp tài nguyên và lớp. Bạn có thể dễ dàng đặt classpath bằng hai lệnh khác nhau như được hiển thị bên dưới:

C:> sdkTool -classpath classpath1;classpath2...

C:> set CLASSPATH=classpath1;classpath2...

Để có thêm thông tin chi tiết về classpath, bạn nên xem các tài liệu sau.

Tài liệu lệnh Java

Đặt classpath

Giải pháp 3:Kiểm tra thư mục

Khi bạn khai báo một thư mục dưới dạng classpath, nó sẽ luôn tương ứng với thư mục gốc của không gian tên. Ví dụ:nếu “/ usr / local / acme / class” nằm trên classpath, thì Java sẽ tìm kiếm một lớp “com.acme.example.Appuals”. Nó sẽ tìm kiếm một lớp có tên đường dẫn sau:

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

Vì vậy, về bản chất, nếu bạn đặt địa chỉ sau trong classpath, Java sẽ không thể tìm thấy lớp:

/usr/local/acme/classes/com/acme/example

Bạn cũng nên kiểm tra thư mục con của mình và xem nó có khớp với FQN không. Nếu FQN các lớp của bạn là “com.acme.example.Appuals”, thì Java sẽ tìm kiếm một “Appuals.class” trong thư mục “com / acme / example”.

Để cung cấp cho bạn một ví dụ, giả sử tình huống sau:

  • Lớp bạn muốn chạy là:com.acme.example.Appuals
  • Đường dẫn đầy đủ của tệp là:/usr/local/acme/classes/com/acme/example/Appuals.class
  • Thư mục làm việc hiện tại là:/ usr / local / acme / class / com / acme / example /

Sau đó, các tình huống sau sẽ ổn định:

# wrong, FQN is needed

java Appuals

# wrong, there is no `com/acme/example` folder in the current working directory

java com.acme.example.Appuals

# wrong, similar to above scenario

java -classpath . com.acme.example.Appuals

# OK ; a relative classpath is set

java -classpath ../../.. com.acme.example.Appuals

# OK; an absolute classpath is set

java -classpath /usr/local/acme/classes com.acme.example.Appuals

Lưu ý: Đường dẫn classpath cũng cần bao gồm tất cả các lớp khác (không thuộc hệ thống) mà ứng dụng của bạn cần.

Giải pháp 4:Kiểm tra gói lớp

Nếu tất cả các giải pháp trên đều đúng trong trường hợp của bạn, bạn cần đảm bảo rằng mã nguồn của bạn được đặt trong đúng thư mục. Ngoài ra, bạn đã khai báo chính xác gói . Nếu bạn chạy mã của mình với IDE, nó có thể sẽ thông báo cho bạn về vấn đề. Tuy nhiên, trong trường hợp của chúng tôi, vì chúng tôi đang chạy nó trong dấu nhắc lệnh, lỗi sẽ không được chú ý và bạn sẽ gặp phải lỗi lớp đang thảo luận.