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

Lỗi ' Không thể tìm 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ông thể tìm hoặc tải dòng lệnh Java chính

Giống như đã đề cập trước đây, lỗi này chủ yếu không liên quan đến hệ thống và người dùng mắc lỗi trong một số tình huống như dưới đây. Trước khi tiến về phía trướ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ó.

Điều gì gây ra lỗi 'Không thể tìm 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 đã thất bại. Lệnh java không thể xác định vị trí lớp tại thư mục chính xá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 thi lệnh từ thiết bị đầu cuối dòng lệnh, máy tính không biết lớp được tìm thấy ở đâu hoặc nó nằm ở đâu. Trong các IDE được nhắm mục tiêu, đây không phải là vấn đề vì IDE giữ một con trỏ trỏ về phía thư mục làm việc hiện tại.

Cú pháp 'java' là gì?

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

Cú pháp thông thường của lệnh là như thế này:

 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 truyền cho ứng dụng của bạn khi toàn bộ gói được biên dịch.

Một ví dụ về 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 một phiên bản được 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ý, bộ sửa đổi và kiểu trả về hợp lệ. Một lớp chính mẫu sẽ là một cái gì đó như:
 công tĩnh void chính (Chuỗi []) 
  • Phương thức này sẽ được gọi với các đối số 'kevin', 'mũi tên' và 'bart' dưới dạng chuỗi [].

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

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

Lỗi 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à dạng sai). Vì chúng ta đang khai báo các tham số trên dòng lệnh, rất có khả năng 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 tình huống có thể xảy ra nơi 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ì

 ListAppuals java 
  • 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 không chính xác bao gồm:
 java ListAppuals. class java com / acme / example / ListAppuals. class 
  • Vỏ nê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 định dạng tên lớp đầy đủ chính xác. Ví dụ về một lỗi là:
 List Listualual.java 
  • Lỗi này cũng sẽ xảy ra nếu bạn mắc lỗi đánh máy hoặc quên viết tên lớp hoàn toàn .

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

Giải pháp 2: Kiểm tra đường dẫn lớp

Nếu bạn đã khai báo tên lớp chính xác nhưng vẫn bị 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. 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 đường dẫn lớp bằng hai lệnh khác nhau như dưới đây:

 C:> sdkTool-classpath classpath1; classpath2 ... C:> đặt CLASSPATH = classpath1; classpath2 ... 

Để hiểu rõ hơn về đường dẫn lớp, bạn nên kiểm tra các tài liệu sau.

Tài liệu lệnh Java

Thiết lập đường dẫn

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 lớp, 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 khác / usr / local / acme / class thì nằm trên đường dẫn lớp, thì Java sẽ tìm kiếm một lớp com com.acme.example.Appuals tựa. Nó sẽ tìm một lớp có tên đường dẫn sau:

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

Vì vậy, về bản chất, nếu bạn đặt địa chỉ sau vào đường dẫn lớp, 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 không. Nếu các lớp FQN của bạn là com com.acme.example.Appuals, thì Java sẽ tìm kiếm một App Appuals. Class, trong thư mục của com com

Để cho bạn một ví dụ, hãy giả sử kịch bản sau đây:

  • Lớp bạn muốn chạy là: com.acme.example.Appuals
  • Đường dẫn tệp đầy đủ là: /usr/local/acme/groupes/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 kịch bản sau đây sẽ tổ chức:

 # 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.Appuals # sai, tương tự như kịch bản trên java-classpath. 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.Appuals 

Lưu ý: Đường dẫn lớp cũng cần bao gồm tất cả các lớp khác (không phải 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 thư mục chính xá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 đề này. 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ẽ nhận được lỗi lớp khi thảo luận.

Bài ViếT Thú Vị