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 hầu hết là do lỗi lập trình của người dùng trong khi khai báo lớp.

Không thể tìm thấy hoặc tải lớp chính trong dòng lệnh Java

Giống 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 nó.

Nguyên nhân 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 đúng vị trí. 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 trả về cho chúng ta lỗi 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ẽ phải đối mặt với lỗi này.

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

 java [...] [...]

Đây là một tùy chọn dòng lệnh, là một tên lớp Java đủ điều kiện và là một đối số dòng lệnh được chuyển đến ứng dụng của bạn khi toàn bộ gói được biên dịch.

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

java -Xmx100m com.acme.example.ListAppuals kevin mũi tên 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 'chính' 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' là string [].

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, khả năng cao là bạn sẽ truyền đối số tên lớp ở dạng sai. Ở đâ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 lỗi.

  • 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 cả gói trong lệnh Java.
java com.acme.example.ListAppuals

thay vì

java List
  • 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ó. Các mục nhập không chính xác bao gồm:
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 chữ cái, bạn sẽ không thể tải lớp chính. Một ví dụ về những sai lầm không chính xác là:
java com.acme.example.listappuals
  • Bạn không nên khai báo 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ỳ sai lầm cẩu thả nào 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 thiết lập classpath bằng hai lệnh khác nhau như hình dưới đây:

C:> sdkTool -classpath classpath1; classpath2 ... C:> set CLASSPATH = classpath1; classpath2 ...

Để có thêm cái nhìn sâu sắc về classpath, bạn nên xem các tài liệu sau.

Tài liệu lệnh Java

Thiết lập classpath

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

Khi bạn khai báo một thư mục là một đường dẫn nối, 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 / class / 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 hay 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ụ, hãy giả sử tình huống sau:

  • Lớp bạn muốn chạy là: com.acme.example.Appuals
  • Các đường dẫn tập tin đầy đủ 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ẽ giữ:

# sai, FQN là cần thiết. java Appuals # sai, không có thư mục `com / acme / example` trong thư mục làm việc hiện tại java com.acme.example. com.acme.example.Appuals # OK; một classpath tương đối được đặt java -classpath ../../ .. com.acme.example.Appuals # OK; một classpath tuyệt đối được đặt java -classpath / usr / local / acme / Class com.acme.example.

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 bằng IDE, nó có thể sẽ thông báo cho bạn về sự cố. 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 lỗi lớp đang thảo luận.