Không thể tìm thấy hoặc tải lớp chính là gì?


1370

Một vấn đề phổ biến mà các nhà phát triển Java mới gặp phải là các chương trình của họ không chạy được với thông báo lỗi: Could not find or load main class ...

Điều này có nghĩa là gì, nguyên nhân gây ra nó và bạn nên khắc phục nó như thế nào?


37
Xin lưu ý rằng đây là câu hỏi "tự trả lời" nhằm mục đích hỏi đáp tham khảo chung cho người dùng Java mới. Tôi không thể tìm thấy một câu hỏi và trả lời hiện có bao gồm đầy đủ điều này (IMO).
Stephen C

Câu trả lời:


1230

Các java <class-name>cú pháp lệnh

Trước hết, bạn cần hiểu đúng cách để khởi chạy một chương trình bằng lệnh java(hoặc javaw).

Cú pháp bình thường 1 là đây:

    java [ <options> ] <class-name> [<arg> ...]

trong đó <option>là một tùy chọn dòng lệnh (bắt đầu bằng ký tự "-"), <class-name>là tên lớp Java đủ điều kiện và <arg>là một đối số dòng lệnh tùy ý được truyền cho ứng dụng của bạn.


1 - Có một số cú pháp khác được mô tả ở gần cuối câu trả lời này.

Tên đủ điều kiện (FQN) cho lớp được viết theo quy ước như bạn làm trong mã nguồn Java; ví dụ

    packagename.packagename2.packagename3.ClassName

Tuy nhiên, một số phiên bản của javalệnh cho phép bạn sử dụng dấu gạch chéo thay vì dấu chấm; ví dụ

    packagename/packagename2/packagename3/ClassName

mà (khó hiểu) trông giống như một tên đường dẫn tệp, nhưng không phải là một tên. Lưu ý rằng thuật ngữ tên đủ điều kiện là thuật ngữ Java tiêu chuẩn ... không phải là thứ tôi vừa tạo ra để làm bạn bối rối :-)

Dưới đây là một ví dụ về một javalệnh sẽ trông như thế nào:

    java -Xmx100m com.acme.example.ListUsers fred joe bert

Ở trên sẽ gây ra javalệnh để làm như sau:

  1. Tìm kiếm phiên bản biên dịch của com.acme.example.ListUserslớp.
  2. Tải lớp.
  3. Kiểm tra xem lớp có một mainphương thức với chữ ký , kiểu trả về và các sửa đổi được đưa ra bởi public static void main(String[]). (Lưu ý, tên của đối số phương thức KHÔNG phải là một phần của chữ ký.)
  4. Gọi phương thức đó truyền cho nó các đối số dòng lệnh ("fred", "joe", "bert") là a String[].

Lý do tại sao Java không thể tìm thấy lớp

Khi bạn nhận được thông báo "Không thể tìm hoặc tải lớp chính ...", điều đó có nghĩa là bước đầu tiên đã thất bại. Các javalệnh đã không thể tìm thấy những lớp. Và quả thực, những "..." trong thông điệp sẽ là tên lớp đầy đủjavalà tìm kiếm.

Vậy tại sao nó không thể tìm thấy lớp học?

Lý do số 1 - bạn đã mắc lỗi với đối số tên lớp

Nguyên nhân có thể đầu tiên là bạn có thể đã cung cấp tên lớp sai. (Hoặc ... tên lớp đúng, nhưng ở dạng sai.) Xem xét ví dụ trên, đây là một loạt các cách sai để chỉ định tên lớp:

  • Ví dụ # 1 - tên lớp đơn giản:

    java ListUser

    Khi lớp được khai báo trong một gói như vậy com.acme.example, thì bạn phải sử dụng tên lớp đầy đủ bao gồm tên gói trong javalệnh; ví dụ

    java com.acme.example.ListUser
  • Ví dụ # 2 - tên tệp hoặc tên đường dẫn thay vì tên lớp:

    java ListUser.class
    java com/acme/example/ListUser.class
  • Ví dụ # 3 - một tên lớp với vỏ không chính xác:

    java com.acme.example.listuser
  • Ví dụ # 4 - một lỗi đánh máy

    java com.acme.example.mistuser
  • Ví dụ # 5 - tên tệp nguồn (ngoại trừ Java 11 trở lên; xem bên dưới)

    java ListUser.java
  • Ví dụ # 6 - bạn quên hoàn toàn tên lớp

    java lots of arguments

Lý do # 2 - đường dẫn lớp của ứng dụng được chỉ định không chính xác

Nguyên nhân có khả năng thứ hai là tên lớp là chính xác, nhưng javalệnh không thể tìm thấy lớp. Để hiểu điều này, bạn cần hiểu khái niệm về "classpath". Điều này được giải thích tốt bởi tài liệu của Oracle:

Vì vậy, nếu bạn đã chỉ định tên lớp một cách chính xác, điều tiếp theo cần kiểm tra là bạn đã chỉ định chính xác đường dẫn lớp:

  1. Đọc ba tài liệu liên kết ở trên. (Có ... ĐỌC chúng! Điều quan trọng là một lập trình viên Java phải hiểu ít nhất những điều cơ bản về cách các cơ chế đường dẫn Java hoạt động.)
  2. Nhìn vào dòng lệnh và / hoặc biến môi trường CLASSPATH có hiệu lực khi bạn chạy javalệnh. Kiểm tra xem tên thư mục và tên tệp JAR có đúng không.
  3. Nếu có tên đường dẫn tương đối trong đường dẫn lớp, hãy kiểm tra xem chúng có giải quyết chính xác không ... từ thư mục hiện tại có hiệu lực khi bạn chạy javalệnh.
  4. Kiểm tra xem lớp (được đề cập trong thông báo lỗi) có thể được định vị trên đường dẫn lớp hiệu quả .
  5. Lưu ý rằng cú pháp classpath khác với Windows so với Linux và Mac OS. (Dấu phân tách classpath nằm ;trên Windows và :trên các bộ phân loại khác. Nếu bạn sử dụng trình phân tách sai cho nền tảng của mình, bạn sẽ không nhận được thông báo lỗi rõ ràng. Thay vào đó, bạn sẽ nhận được một tệp hoặc thư mục không tồn tại trên đường dẫn sẽ bị bỏ qua trong âm thầm .)

Lý do # 2a - thư mục sai nằm trên đường dẫn lớp

Khi bạn đặt một thư mục trên đường dẫn lớp, nó sẽ tương ứng với thư mục gốc của không gian tên đủ điều kiện. Các lớp được đặt trong cấu trúc thư mục bên dưới gốc đó, bằng cách ánh xạ tên đủ điều kiện vào một tên đường dẫn . Vì vậy, ví dụ, nếu "/ usr / local / acme / class" nằm trên đường dẫn lớp, thì khi JVM tìm kiếm một lớp được gọi com.acme.example.Foon, nó sẽ tìm tệp ". Class " với tên đường dẫn này:

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

Nếu bạn đã đặt "/ usr / local / acme / class / com / acme / example" trên đường dẫn lớp, thì JVM sẽ không thể tìm thấy lớp.

Lý do # 2b - đường dẫn thư mục con không khớp với FQN

Nếu các lớp FQN của bạn là com.acme.example.Foon, thì JVM sẽ tìm kiếm "Foon. Class" trong thư mục "com / acme / example":

  • Nếu cấu trúc thư mục của bạn không khớp với cách đặt tên gói theo mẫu ở trên, JVM sẽ không tìm thấy lớp của bạn.

  • Nếu bạn cố đổi tên một lớp bằng cách di chuyển nó, điều đó cũng sẽ thất bại ... nhưng stacktrace ngoại lệ sẽ khác. Có trách nhiệm nói điều gì đó như thế này:

    Caused by: java.lang.NoClassDefFoundError: <path> (wrong name: <name>)

    bởi vì FQN trong tệp lớp không khớp với những gì trình tải lớp dự kiến ​​sẽ tìm thấy.

Để đưa ra một ví dụ cụ thể, giả sử rằng:

  • bạn muốn chạy com.acme.example.Foonlớp
  • đường dẫn tập tin đầy đủ là /usr/local/acme/classes/com/acme/example/Foon.class,
  • thư mục làm việc hiện tại của bạn là /usr/local/acme/classes/com/acme/example/,

sau đó:

# wrong, FQN is needed
java Foon

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

# wrong, similar to above
java -classpath . com.acme.example.Foon

# fine; relative classpath set
java -classpath ../../.. com.acme.example.Foon

# fine; absolute classpath set
java -classpath /usr/local/acme/classes com.acme.example.Foon

Ghi chú:

  • Các -classpathtùy chọn có thể được rút ngắn xuống còn -cptrong hầu hết các phiên bản Java. Kiểm tra các mục thủ công tương ứng cho java, javacv.v.
  • Hãy suy nghĩ cẩn thận khi lựa chọn giữa tên đường dẫn tuyệt đối và tương đối trong đường dẫn lớp. Hãy nhớ rằng một tên đường dẫn tương đối có thể "phá vỡ" nếu thư mục hiện tại thay đổi.

Lý do # 2c - thiếu phụ thuộc từ đường dẫn lớp

Classpath 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 phụ thuộc vào. (Các lớp hệ thống được đặt tự động và bạn hiếm khi cần quan tâm đến vấn đề này.) Để lớp chính tải chính xác, JVM cần tìm:

(Lưu ý: các đặc tả JLS và JVM cho phép một số phạm vi để JVM tải các lớp "một cách lười biếng" và điều này có thể ảnh hưởng khi ném ngoại lệ trình nạp lớp.)

Lý do # 3 - lớp đã bị khai báo sai gói

Đôi khi xảy ra việc ai đó đặt tệp mã nguồn vào thư mục sai trong cây mã nguồn của họ hoặc họ bỏ qua phần packagekhai báo. Nếu bạn làm điều này trong một IDE, trình biên dịch của IDE sẽ cho bạn biết về điều này ngay lập tức. Tương tự như vậy nếu bạn sử dụng một công cụ xây dựng Java phong nha, công cụ này sẽ chạy javactheo cách sẽ phát hiện vấn đề. Tuy nhiên, nếu bạn xây dựng mã Java bằng tay, bạn có thể thực hiện theo cách mà trình biên dịch không nhận thấy vấn đề và tệp ". Class" kết quả không nằm ở vị trí mà bạn mong đợi.

Vẫn không thể tìm thấy vấn đề?

Có rất nhiều thứ để kiểm tra, và rất dễ bỏ lỡ một cái gì đó. Hãy thử thêm -Xdiagtùy chọn vào javadòng lệnh (như điều đầu tiên sau java). Nó sẽ đưa ra nhiều thứ khác nhau về tải lớp và điều này có thể cung cấp cho bạn manh mối về vấn đề thực sự là gì.

Ngoài ra, hãy xem xét các sự cố có thể xảy ra do sao chép và dán các ký tự vô hình hoặc không phải ASCII từ các trang web, tài liệu, v.v. Và xem xét "homoglyphs", hai chữ cái hoặc ký hiệu trông giống nhau ... nhưng không.

Cuối cùng, rõ ràng bạn có thể gặp phải vấn đề này nếu bạn cố khởi chạy từ tệp JAR có chữ ký không chính xác (META-INF/*.SF).


Cú pháp thay thế cho java

Có ba cú pháp thay thế cho các chương trình Java khởi chạy bằng cách sử dụng java command.

1) Cú pháp được sử dụng để khởi chạy tệp JAR "thực thi" như sau:

  java [ <options> ] -jar <jar-file-name> [<arg> ...]

ví dụ

  java -Xmx100m -jar /usr/local/acme-example/listuser.jar fred

Tên của lớp điểm đầu vào (nghĩa là com.acme.example.ListUser) và đường dẫn lớp được chỉ định trong MANIFEST của tệp JAR.

2) Cú pháp khởi chạy một ứng dụng từ một mô-đun (Java 9 trở lên) như sau:

  java [ <options> ] --module <module>[/<mainclass>] [<arg> ...]

Tên của lớp entrypoint được xác định bởi <module>chính nó, hoặc được đưa ra bởi tùy chọn <mainclass>.

3) Từ Java 11 trở đi, bạn có thể biên dịch và chạy một tệp mã nguồn duy nhất và chạy nó với cú pháp sau:

  java [ <options> ] <sourcefile> [<arg> ...]

trong đó (thường là) một tệp có hậu tố ".java".

Để biết thêm chi tiết, vui lòng tham khảo tài liệu chính thức cho javalệnh phát hành Java mà bạn đang sử dụng.


IDE

Một IDE Java điển hình có hỗ trợ để chạy các ứng dụng Java trong chính JVM IDE hoặc trong một JVM con. Chúng thường miễn dịch với ngoại lệ cụ thể này, vì IDE sử dụng các cơ chế riêng của nó để xây dựng đường dẫn lớp thời gian chạy, xác định lớp chính và tạo javadòng lệnh.

Tuy nhiên vẫn có thể xảy ra ngoại lệ này, nếu bạn làm những việc phía sau IDE. Ví dụ, nếu trước đây bạn đã thiết lập Trình khởi chạy ứng dụng cho ứng dụng Java của mình trong Eclipse và sau đó bạn đã di chuyển tệp JAR chứa lớp "chính" sang một vị trí khác trong hệ thống tệp mà không thông báo cho Eclipse , Eclipse sẽ vô tình khởi chạy JVM với một classpath không chính xác.

Nói tóm lại, nếu bạn gặp vấn đề này trong IDE, hãy kiểm tra những thứ như trạng thái IDE cũ, tham chiếu dự án bị hỏng hoặc cấu hình trình khởi chạy bị hỏng.

IDE cũng có thể bị nhầm lẫn. IDE là những phần mềm cực kỳ phức tạp bao gồm nhiều phần tương tác. Nhiều trong số các phần này áp dụng các chiến lược bộ nhớ đệm khác nhau để làm cho toàn bộ IDE đáp ứng. Điều này đôi khi có thể đi sai, và một triệu chứng có thể là vấn đề khi khởi chạy ứng dụng. Nếu bạn nghi ngờ điều này có thể xảy ra, đáng để thử những thứ khác như khởi động lại IDE của bạn, xây dựng lại dự án, v.v.


Tài liệu tham khảo khác


43
Tôi gặp vấn đề này khi tôi đang cố gắng chạy Class với thư viện bên thứ 3. Tôi đã gọi java như thế này : java -cp ../third-party-library.jar com.my.package.MyClass; điều này không hoạt động, thay vào đó, cũng cần phải thêm thư mục cục bộ vào đường dẫn lớp (được phân tách bằng :, như thế này : java -cp ../third-party-library.jar:. com.my.package.MyClass, sau đó nó sẽ hoạt động
lanoxx

23
Sau nhiều năm lập trình java tôi vẫn tìm cách kết thúc trên trang này. Đối với tôi vấn đề là cú pháp classpath phụ thuộc vào hệ điều hành . Tôi là người mới lập trình trên Windows và không biết gì.
keyer

5
Ghi chú bổ sung, điểm 2 cứu tôi! Thật buồn khi thấy rằng javanó không nói rằng nó không tìm thấy một lớp nhập khẩu, mà thay vào đó là lớp chính bạn đang cố gắng chạy. Điều này là sai lệch, mặc dù tôi chắc chắn có lý do cho điều đó. Tôi đã có trường hợp javabiết chính xác lớp của tôi ở đâu, tuy nhiên nó không thể tìm thấy một trong những lớp được nhập. Thay vì nói điều đó, nó phàn nàn về việc không tìm thấy lớp học chính của tôi. Thực sự, thông báo.
MSX

Tôi đã có vấn đề này hai lần trong Eclipse. Lần đầu tiên chữ ký của main () bị sai. Lần thứ hai tôi đã đổi tên một .jar và mặc dù tôi đã thêm cái mới vào đường dẫn xây dựng, Eclipse đã không tìm thấy cái cũ, vì vậy dự án đã không biên dịch, với lỗi này. Tôi đã phải xóa tệp .jar khỏi Project> Properties> Java Build Path> L Thư viện.
GregT

Tôi đã gặp nó lần thứ ba. Tôi đã chạy chương trình từ tệp bó Windows 10 và đặt tên .jar vào một biến (được gọi với "-cp% jarname%; lib *"). Tôi đã nhầm lẫn đặt thêm một khoảng trống ở cuối jarname và nó gây ra lỗi. Hat trick :)
GregT

239

Nếu tên mã nguồn của bạn là HelloWorld.java, mã được biên dịch của bạn sẽ là HelloWorld.class.

Bạn sẽ gặp lỗi đó nếu bạn gọi nó bằng cách sử dụng:

java HelloWorld.class

Thay vào đó, sử dụng cái này:

java HelloWorld

3
Vấn đề là giải pháp này chỉ hoạt động đối với các lớp Java được khai báo trong gói mặc định không có phụ thuộc tệp JAR. (Và thậm chí sau đó, không phải lúc nào cũng vậy.) Hầu hết các chương trình Java không đơn giản như vậy.
Stephen C

1
như Stephen đã nói, điều này chỉ hoạt động với "gói mặc định" - có nghĩa là không có khai báo gói ở đầu tệp. Để kiểm tra nhanh một số mã, tôi đã làm: javac TestCode.javatiếp theojava TestCode
Ai đó ở đâu đó vào

Điều này đã không làm việc cho tôi. Nó vẫn nói, "Không thể tìm thấy hoặc tải lớp chính HelloWorld"
Jim

java -jar HelloWorld.jar cũng là một tùy chọn
BMaximus 7/12/2016

12
Tôi cần phải làmjava -classpath . HelloWorld
Chris Prince

136

Nếu các lớp của bạn nằm trong các gói thì bạn phải vào cdthư mục gốc của dự án của bạn và chạy bằng cách sử dụng tên đủ điều kiện của lớp (packName.MainClassName).

Thí dụ:

Các lớp học của tôi ở đây:

D:\project\com\cse\

Tên đầy đủ của lớp chính của tôi là:

com.cse.Main

Vì vậy, tôi cdtrở lại thư mục dự án gốc:

D:\project

Sau đó ban hành javalệnh:

java com.cse.Main

Câu trả lời này là để giải cứu các lập trình viên java người mới khỏi sự thất vọng do một lỗi phổ biến, tôi khuyên bạn nên đọc câu trả lời được chấp nhận để có thêm kiến ​​thức chuyên sâu về đường dẫn java.


2
Câu trả lời này làm cho toàn bộ các giả định. Và có nhiều cách khác để đạt được điều này. Thay vì mù quáng làm theo lời khuyên trên, tôi khuyên mọi người nên dành thời gian để đọc các liên kết trong Câu trả lời của tôi giải thích cách hoạt động của đường dẫn lớp Java. Tốt hơn là HIỂU những gì bạn đang làm ...
Stephen C

2
Câu trả lời này đưa ra các giả định chính xác mà tôi cần :) Tôi đã nằm trong thư mục của tệp. Class và java.exe không hoạt động. Khi tôi cd-ed ở trên và chạy với tên gói được bao gồm trong dòng lệnh, nó hoạt động.
Nick Constantine

61

Nếu bạn định nghĩa lớp chính và phương thức chính trong apackage , bạn nên chạy nó trên thư mục phân cấp, sử dụng tên đầy đủ của lớp ( packageName.MainClassName).

Giả sử có một tệp mã nguồn (Main.java):

package com.test;

public class Main {

    public static void main(String[] args) {
        System.out.println("salam 2nya\n");
    }
}

Để chạy mã này, bạn nên đặt Main.Classtrong gói như thư mục ./com/test/Main.Java. Và trong thư mục gốc sử dụng java com.test.Main.


1
Xem "Ghi chú bổ sung số 1" trong câu trả lời của tôi. Để giải thích rõ hơn về vấn đề này.
Stephen C

14
@StephenC Vâng, câu trả lời của bạn đầy đủ hơn (và tất nhiên là +1), nhưng câu trả lời cụ thể này có từ "gói" trong đó, cho phép tôi tìm thấy những gì tôi cần nhanh chóng. Va no đa hoạt động. Vì vậy, +1 Razavi. StephenC, của bạn thiếu ví dụ gói đơn giản mà tôi cần vì tôi chưa quen với Java.
kmort

5
Đây chính xác là vấn đề của tôi. Tôi đã lội qua hàng tấn tài liệu Java và ví dụ cụ thể này là thứ tôi cần
John

1
Vâng, ví dụ cụ thể là tốt đẹp, điều này làm việc hoàn hảo. Tôi chắc chắn câu trả lời chính là rất kỹ lưỡng, nhưng thật khó để nhìn thấy cây cho rừng. Một người đẹp @Razavi
Pixel

1
Tôi thích câu trả lời ngắn gọn và hữu ích này thay vì được chấp nhận!
Spara

46

Khi cùng một mã hoạt động trên một PC, nhưng nó hiển thị lỗi ở một PC khác, giải pháp tốt nhất tôi từng tìm thấy là biên dịch như sau:

javac HelloWorld.java
java -cp . HelloWorld

2
Đây không phải là một khuyến nghị tốt. Bạn phụ thuộc vào biến môi trường CLASSPATH không được đặt hoặc có giá trị phù hợp với ".". Vâng, nó hoạt động trong nhiều trường hợp, nhưng nó sẽ không ở những người khác.
Stephen C

Vâng chắc chắn javac -classpath . HelloWorld.javasẽ làm việc! Và đó là một giải pháp tốt hơn trong trường hợp của bạn.
Stephen C

2
Nếu bạn có 'gói com.some.address' là dòng đầu tiên - điều này sẽ không hoạt động. Bạn sẽ cần bình luận ra 'địa chỉ gói' ..
Joe

1
@Joe - Hack đó (bình luận ra gói) sẽ hoạt động (trong một số trường hợp) nhưng đó là một ý tưởng tồi. Một ý tưởng tốt hơn là tìm hiểu / hiểu những gì gây ra vấn đề và thực hiện giải pháp chính xác.
Stephen C

36

Điều gì đã giúp tôi là chỉ định classpath trên dòng lệnh, ví dụ:

  1. Tạo một thư mục mới, C:\temp

  2. Tạo tệp Temp.java trong C:\temp, với lớp sau trong đó:

    public class Temp {
        public static void main(String args[]) {
            System.out.println(args[0]);
        }
    }
  3. Mở một dòng lệnh trong thư mục C:\tempvà viết lệnh sau để biên dịch lớp Temp:

    javac Temp.java
  4. Chạy lớp Java đã biên dịch, thêm -classpathtùy chọn để cho JRE biết nơi tìm lớp:

    java -classpath C:\temp Temp Hello!

3
Trong Ubuntu, tôi cũng phải chỉ định đường dẫn. Không hiểu tại sao nó không thể sử dụng Thư mục làm việc hiện tại theo mặc định. Tôi tin rằng Java được tài trợ bởi các nhà sản xuất Bàn phím !!
đi

1
@gone - Lý do mà "." không có trong $ PATH theo mặc định rằng đó là một bẫy bảo mật. sea.upenn.edu/cets/answers/dot-path.html
Stephen C

Cảm ơn rất nhiều vì điều này ...... mặc dù không chắc tại sao java không thể tìm ra đường dẫn lớp ngay cả sau khi đặt nó trong các biến môi trường.
akash89

@ akash89 - Những lý do rất có thể là: 1) javakhông xem xét $ CLASSPATH (vì bạn đã sử dụng-classpath hoặc -jar) hoặc 2) cài đặt đường dẫn lớp không được đặt trong môi trường không có hiệu lực trong bối cảnh đó javalà chạy; ví dụ vì bạn không "nguồn" tệp nơi đã thêm các lệnh setenv trong trình bao bên phải.
Stephen C

Tôi vẫn gặp Lỗi: Không thể tìm hoặc tải lớp chính Temp ai có thể giúp!
Sao

27

Theo thông báo lỗi ("Không thể tìm hoặc tải lớp chính"), có hai loại sự cố:

  1. Không thể tìm thấy lớp chính
  2. Không thể tải lớp chính (trường hợp này không được thảo luận đầy đủ trong câu trả lời được chấp nhận)

Không thể tìm thấy lớp chính khi có lỗi chính tả hoặc cú pháp sai trong tên lớp đủ điều kiện hoặc nó không tồn tại trong đường dẫn lớp được cung cấp .

Không thể tải lớp chính khi lớp không thể được khởi tạo , thông thường lớp chính mở rộng một lớp khác và lớp đó không tồn tại trong đường dẫn lớp được cung cấp.

Ví dụ:

public class YourMain extends org.apache.camel.spring.Main

Nếu không bao gồm lò xo lạc đà, lỗi này sẽ được báo cáo.


"Về cơ bản" có rất nhiều loại khác nữa. Và vấn đề siêu lớp bị thiếu là một trường hợp con rất bất thường. (Thật khác thường đến nỗi tôi chưa bao giờ thấy nó ... trong các câu hỏi được hỏi trên trang web này.)
Stephen C

Có HAI vì lỗi nói "Không thể TÌM hoặc LOAD lớp chính". Nếu có các loại khác, xin vui lòng tư vấn cho tôi. Tôi đã nhìn thấy nó, vì vậy chỉ muốn chia sẻ nó ở đây có lẽ người khác sẽ cần nó.
Xiao Peng - ZenUML.com

1
Tôi đã sửa đổi nó thành một cái gì đó như "Bạn cần bao gồm tất cả các lớp được yêu cầu để bắt đầu lớp chính để tránh lỗi cụ thể này". Tôi không cố gắng để thuyết phục bạn. Nó chỉ là một cách mà tôi muốn thấy. Tôi để lại câu trả lời ở đây chỉ dành cho những người có thể thích đọc mọi thứ theo cách này. Chúng ta đừng mở rộng cuộc thảo luận này thêm nữa :) Tôi đã thay đổi tuyên bố của mình thành "không thảo luận đầy đủ trong câu trả lời được chấp nhận" và hy vọng bạn cảm thấy tốt hơn.
Xiao Peng - ZenUML.com

5
Thông tin này rất quan trọng và xứng đáng được đề cập rõ ràng (đây là câu trả lời duy nhất đề cập extends). Tôi vừa học được một cách khó khăn là khi lớp chính không tải được vì nó mở rộng một lớp khác không thể tìm thấy , java không báo cáo lớp thực tế nào không được tìm thấy (không giống như NoClassDefFoundError). Vì vậy, có nó xảy ra, và đó là một tình huống nhổ tóc khi bạn không biết điều này.
Hugues M.

1
Trong tình huống này, có cách nào để biết chính xác lớp phụ thuộc nào không tải được không?
Carlos A. Ibarra

16

Tôi đã có một lỗi như vậy trong trường hợp này:

java -cp lib.jar com.mypackage.Main

Nó hoạt động với ;Windows và :cho Unix:

java -cp lib.jar; com.mypackage.Main

Đúng. Điều đó rất có thể bởi vì bạn Mainkhông có trong tệp JAR. -cp lib.jar;có nghĩa là điều tương tự như -cp lib.jar;. thư mục hiện tại được bao gồm trên đường dẫn lớp.
Stephen C

Cuối cùng đã khắc phục sự cố cho unix .. cảm ơn (hoạt động với :)
Vicky

16

Hãy thử -Xdiag .

Câu trả lời của Steve C bao gồm các trường hợp có thể độc đáo, nhưng đôi khi để xác định xem lớp không thể được tìm thấy hoặc tải có thể không dễ dàng như vậy. Sử dụng java -Xdiag(kể từ JDK 7). Điều này in ra một stacktrace đẹp cung cấp một gợi ý về ý Could not find or load main classnghĩa của thông điệp tin nhắn.

Ví dụ, nó có thể trỏ bạn đến các lớp khác được sử dụng bởi lớp chính không thể tìm thấy và ngăn lớp chính được tải.


16

Sử dụng lệnh này:

java -cp . [PACKAGE.]CLASSNAME

Ví dụ: Nếu tên lớp của bạn là Hello. Class được tạo từ Hello.java thì hãy sử dụng lệnh dưới đây:

java -cp . Hello

Nếu tệp Hello.java của bạn nằm trong gói com.demo thì hãy sử dụng lệnh bên dưới

java -cp . com.demo.Hello

Với JDK 8 nhiều lần, tệp lớp có mặt trong cùng một thư mục, nhưng javalệnh mong đợi classpath và vì lý do này, chúng tôi thêm -cp .để lấy thư mục hiện tại làm tham chiếu cho đường dẫn lớp.


Điều này chỉ hoạt động trong các trường hợp đơn giản. Các trường hợp phức tạp hơn đòi hỏi một classpath phức tạp hơn.
Stephen C

Và đối với >> thực sự << các trường hợp đơn giản, -cp .là không cần thiết, bởi vì nếu $CLASSPATHkhông được đặt, thì đó .là đường dẫn mặc định.
Stephen C

Không có Stephen, nhiều lần trong classpath mặc định của Windows không hoạt động. Tôi đã thử nó trên ba máy khác nhau, bạn cũng có thể thử nó.
shaILU

Điều đó có thể là do bạn thực sự đã đặt biến môi trường% CLASSPATH% ở đâu đó. Nếu bạn làm điều đó, thì bạn không sử dụng đường dẫn mặc định. ( echo %CLASSPATH%Đầu ra là gì?) Và không, tôi không thể kiểm tra vì tôi không có PC Windows.
Stephen C

2
Điều này làm việc cho tôi khi tôi cố chạy một chương trình đơn giản từ dòng lệnh
SnuKies

15

Đôi khi những gì có thể gây ra vấn đề không liên quan gì đến lớp chính, và tôi đã phải tìm ra vấn đề này một cách khó khăn. Đó là một thư viện được tham chiếu mà tôi đã chuyển đi và nó đã cho tôi:

Không thể tìm thấy hoặc tải lớp xxx chính của Linux

Tôi chỉ xóa tham chiếu đó, thêm nó một lần nữa và nó hoạt động tốt trở lại.


1
Có vẻ như vấn đề là bạn đã có một đường dẫn lớp không chính xác do một "tham chiếu" bị hỏng trong dự án của bạn trong IDE. Tôi sẽ cập nhật câu trả lời của tôi để bao gồm trường hợp đó.
Stephen C

@StephenC và EduardoDennis, Cũng ở đây, có một cái bình bị thiếu, cái bình đó chứa một giao diện mà lớp chính phụ thuộc vào để được khởi tạo. Vì vậy, thông báo lỗi quá rộng. Tôi nên nói "không thể tìm thấy" nếu không tìm thấy tệp lớp và "không thể tải (thiếu phụ thuộc)" nếu thiếu thứ gì khác nhưng không phải là tệp, vì vậy thông báo lỗi quá rộng sẽ bị sai nếu bạn chỉ tập trung trên phần "tìm" của nó :(
Aquarius Power

@AquariusPower - Đáng lẽ phải có một stacktrace "gây ra" cho ngoại lệ "nguyên nhân" nói rằng lớp wht bị thiếu. Nếu bạn muốn đề xuất với các nhà phát triển Java rằng họ thay đổi một thông báo lỗi đã nói rằng trong hơn 20 năm qua ... hãy thoải mái. (Tôi nghĩ rằng thông báo lỗi là chính xác. Vấn đề là >> bạn << đã thu hẹp trong mệnh đề sai.)
Stephen C

@StephenC ý tôi là, chắc chắn họ có quyền truy cập vào thông tin nếu tệp lớp chính có sẵn hay không, vậy tại sao không hiển thị cho chúng tôi thông báo lỗi tốt hơn nói rằng tệp đó bị thiếu. Mặt khác, họ cũng có thể nói "Tập tin đã được tìm thấy nhưng không thể tải được" vào thời điểm đó, chúng tôi sẽ nhanh chóng tập trung vào các phụ thuộc thay vì mất nửa ngày để nghiên cứu và thử nghiệm những điều cần hiểu. Ý tôi là vậy :) Họ có thể làm điều đó một cách hạn chế trong hơn 20 năm, nhưng họ có thể cải thiện nó và chúng tôi ở đây để cấp điều đó sẽ xảy ra thông qua những lời chỉ trích và khiếu nại của chúng tôi! : D
Sức mạnh Bảo Bình

Hãy hiểu những gì >> tôi << có nghĩa là. Khiếu nại về điều đó trong một số nhận xét mơ hồ về Q & A 3 tuổi sẽ không đạt được bất cứ điều gì. Những người có thể hành động một cách đáng tin cậy về khiếu nại của bạn sẽ không nhận thấy điều đó. Nếu bạn muốn làm một cái gì đó mang tính xây dựng, hãy gửi một bản vá. (Tôi không đánh giá cơ hội của bạn, nhưng chúng sẽ lớn hơn nếu bạn chỉ nói về nó.)
Stephen C

10

Trong trường hợp này, bạn có:

Không thể tìm thấy hoặc tải lớp chính ? Classpath

Đó là bởi vì bạn đang sử dụng "-classpath", nhưng dấu gạch ngang không phải là dấu gạch ngang được sử dụng bởi javatrên dấu nhắc lệnh. Tôi đã có vấn đề này sao chép và dán từ Notepad sang cmd.


2
Ồ Đó là một nguyên nhân hoàn toàn kỳ quái! (Nhưng nó phục vụ bạn ngay khi sử dụng Notepad thay vì trình soạn thảo văn bản thực sự :-))
Stephen C

10

Tôi đã có cùng một vấn đề và cuối cùng đã tìm thấy lỗi của mình :) Tôi đã sử dụng lệnh này để biên dịch và nó hoạt động chính xác:

javac -cp "/home/omidmohebbi/AAAATest/jars/core-1.7.jar:/home/omidmohebbi/AAAATest/jars/javase-1.7.jar:/home/omidmohebbi/AAAATest/jars/qrgen-1.2.jar" qrcode.java

Nhưng lệnh này không hoạt động với tôi (tôi không thể tìm hoặc tải lớp chính, qrcode):

java -cp "/home/omidmohebbi/AAAATest/jars/core-1.7.jar:/home/omidmohebbi/AAAATest/jars/javase-1.7.jar:/home/omidmohebbi/AAAATest/jars/qrgen-1.2.jar" qrcode

Cuối cùng tôi chỉ thêm ký tự ':' vào cuối đường dẫn lớp và vấn đề đã được giải quyết:

java -cp "/home/omidmohebbi/AAAATest/jars/core-1.7.jar:/home/omidmohebbi/AAAATest/jars/javase-1.7.jar:/home/omidmohebbi/AAAATest/jars/qrgen-1.2.jar:" qrcode

7

Trong trường hợp của tôi, lỗi xuất hiện do tôi đã cung cấp tên tệp nguồn thay vì tên lớp.

Chúng ta cần cung cấp tên lớp chứa phương thức chính cho trình thông dịch.


Đúng. Xem ví dụ # 2 của tôi về các cách sai để chỉ định tên lớp !!
Stephen C

7

Điều này có thể giúp bạn nếu trường hợp của bạn đặc biệt giống như của tôi: khi mới bắt đầu, tôi cũng gặp phải vấn đề này khi tôi cố chạy một chương trình Java.

Tôi đã biên dịch nó như thế này:

javac HelloWorld.java

Và tôi đã cố chạy cũng với phần mở rộng tương tự:

java Helloworld.java

Khi tôi loại bỏ .javavà viết lại lệnh như thế java HelloWorld, chương trình chạy hoàn hảo. :)


2
Điều này là do bạn đang thực thi phiên bản đã biên dịch của .java. Nó thực sự đang thực thi tệp. Class
Jason V

Đối với hồ sơ, điều này giống như Lý do số 1, Ví dụ số 5 trong Câu trả lời của tôi ...
Stephen C

6

Có vẻ như tất cả các câu trả lời đều hướng tới người dùng Windows. Đối với Mac, dấu phân cách classpath là :không ;. Vì một lỗi thiết lập đường dẫn sử dụng ;không được đưa ra nên điều này có thể khó khám phá nếu đến từ Windows sang Mac.

Đây là lệnh Mac tương ứng:

java -classpath ".:./lib/*" com.test.MyClass

Trường hợp trong ví dụ này là gói com.testvà một libthư mục cũng được đưa vào đường dẫn lớp.


2
Trên Linux cũng giống như trên Mac.
Alex78191

Tại sao /*cần thiết?
Alex78191

Đây là một cú pháp ký tự đại diện. (Không bắt buộc. Bạn có thể liệt kê rõ ràng các JAR nếu bạn muốn.)
Stephen C

6

nhập mô tả hình ảnh ở đây

Vị trí tệp lớp: C: \ test \ com \ company

Tên tệp: Main. Class

Tên lớp đầy đủ: com.company.Main

Lệnh dòng lệnh:

java  -classpath "C:\test" com.company.Main

Lưu ý ở đây rằng đường dẫn lớp KHÔNG bao gồm \ com \ company


6

Tôi đã dành một khoảng thời gian kha khá để cố gắng giải quyết vấn đề này. Tôi nghĩ rằng bằng cách nào đó tôi đã thiết lập đường dẫn lớp của mình không chính xác nhưng vấn đề là tôi đã gõ:

java -cp C:/java/MyClasses C:/java/MyClasses/utilities/myapp/Cool  

thay vì:

java -cp C:/java/MyClasses utilities/myapp/Cool   

Tôi nghĩ rằng ý nghĩa của đủ điều kiện có nghĩa là bao gồm tên đường dẫn đầy đủ thay vì tên gói đầy đủ.


Tôi đã cập nhật câu trả lời của mình để cố gắng giải quyết sự nhầm lẫn đó.
Stephen C

2
Cả hai điều này đều đúng. Lớp phải được cung cấp dưới dạng utilities.myapp.Coolhoặc bất kỳ tên gói nào của nó, nếu có.
Hầu tước Lorne

5

Đầu tiên thiết lập đường dẫn bằng lệnh này;

set path="paste the set path address"

Sau đó, bạn cần tải chương trình. Nhập "cd (tên thư mục)" vào ổ đĩa được lưu trữ và biên dịch nó. Ví dụ: nếu chương trình của tôi được lưu trên ổ D, hãy gõ "D:" nhấn enter và gõ "cd (tên thư mục)".


4
Điều này không giúp được gì. Câu hỏi này là về các chương trình Java, không phải là các tệp thực thi thông thường. Java không sử dụng PATH để định vị bất cứ thứ gì và nếu "cd" giúp thì đó là do may mắn thay vì phán đoán.
Stephen C

if "cd" helps then it by luck rather than by judgement. Điều này là sai (tôi tin), vì java sử dụng thư mục hiện tại .như một phần của đường dẫn lớp theo mặc định.
GKFX

2
@GKFX - Ý tôi là vậy. Trừ khi bạn biết rằng bạn đang sử dụng đường dẫn mặc định (hoặc đường dẫn lớp có "." Trên đó), "cd" sẽ không có hiệu lực. Giải pháp này hoạt động nhiều hơn nhờ may mắn (tức là đoán / hy vọng rằng "." Nằm trên đường dẫn lớp) hơn là bằng phán đoán (tức là kiểm tra "." Có trên đường dẫn lớp không). Hơn nữa, bạn không chính xác về mặc định. Java sử dụng "." theo mặc định classpath, không phải là một phần của classpath theo mặc định.
Stephen C

5

Điều đã khắc phục vấn đề trong trường hợp của tôi là:

Nhấp chuột phải vào dự án / lớp bạn muốn chạy, sau đó Run As-> Run Configurations. Sau đó, bạn nên sửa cấu hình hiện tại hoặc thêm mới theo cách sau:

mở Classpathtab, nhấp vào Advanced...nút sau đó thêm binthư mục của dự án của bạn.


5

Nếu bạn sử dụng Maven để xây dựng tệp JAR, vui lòng đảm bảo chỉ định lớp chính trong tệp pom.xml:

<build>
    <plugins>
        <plugin>
            <artifactId>maven-jar-plugin</artifactId>
            <configuration>
                <archive>
                    <manifest>
                        <mainClass>class name us.com.test.abc.MyMainClass</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
    </plugins>
</build>

4

Đây là một trường hợp cụ thể, nhưng vì tôi đã đến trang này để tìm giải pháp và không tìm thấy nó, tôi sẽ thêm nó vào đây.

Windows (đã thử nghiệm với 7) không chấp nhận các ký tự đặc biệt (như á ) trong tên lớp và tên gói. Linux, mặc dù.

Tôi đã tìm thấy điều này khi tôi xây dựng một .jarNetBeans và cố gắng chạy nó trong dòng lệnh. Nó chạy trong NetBeans nhưng không phải trong dòng lệnh.


4

Trên Windows đặt .;ở giá trị CLASSPATH ngay từ đầu.

Các . (dấu chấm) có nghĩa là "tìm trong thư mục hiện tại". Đây là một giải pháp lâu dài.

Ngoài ra, bạn có thể đặt "một lần" với thiết lập CLASSPATH=%CLASSPATH%;.. Điều này sẽ kéo dài chừng nào cửa sổ cmd của bạn đang mở.


1
Lời khuyên này có thể hoặc không thể giúp đỡ. Nó sẽ giúp nếu cây lớp chứa các lớp trong thư mục hiện tại. Nó sẽ không nếu họ không. Tôi thực sự sẽ không làm điều này. Thay vào đó, tôi sẽ tạo một tập lệnh bao bọc một lớp hoạt động cho dù người dùng có ở trong thư mục "đúng" hay không.
Stephen C

4

Bạn thực sự cần phải làm điều này từ srcthư mục. Ở đó bạn gõ dòng lệnh sau:

[name of the package].[Class Name] [arguments]

Giả sử lớp của bạn được gọi CommandLine.classvà mã trông như thế này:

package com.tutorialspoint.java;

    /**
     * Created by mda21185 on 15-6-2016.
     */

    public class CommandLine {
        public static void main(String args[]){
            for(int i=0; i<args.length; i++){
                System.out.println("args[" + i + "]: " + args[i]);
            }
        }
    }

Sau đó, bạn nên cdvào thư mục src và lệnh bạn cần chạy sẽ giống như thế này:

java com.tutorialspoint.java.CommandLine this is a command line 200 -100

Và đầu ra trên dòng lệnh sẽ là:

args[0]: this
args[1]: is
args[2]: a
args[3]: command
args[4]: line
args[5]: 200
args[6]: -100

2
Một lớp không thể được gọi là "CommandLine. Class". Đó sẽ là một lỗi cú pháp Java. (Điều bạn muốn nói là tệp chứa lớp đã biên dịch được gọi là "CommandLine. Class" ...). Vấn đề khác là hướng dẫn của bạn "cd vào thư mục nguồn" chỉ hoạt động nếu bạn biên dịch mã >> thành << cây thư mục nguồn. Cuối cùng, nếu trình biên dịch của bạn sử dụng đối số "-cp", thì bạn cần một tương đương khi bạn chạy.
Stephen C

Trong dự án của tôi, tôi có thư mục src và thư mục bin ở thư mục gốc. Tôi đã phải cdvào srcvà sau đó chạy lệnh java ../bin com.blah.blah.MyClasslàm việc cho tôi. Vì vậy, cảm ơn cho tiền boa!
tamj0rd2

3

Trong Java, khi bạn đôi khi chạy JVM từ dòng lệnh bằng cách sử dụng java thực thi và đang cố khởi động một chương trình từ một tệp lớp với static static void main (PSVM), bạn có thể gặp phải lỗi bên dưới mặc dù tham số đường dẫn đến JVM là chính xác và tệp lớp có mặt trên đường dẫn lớp:

Error: main class not found or loaded

Điều này xảy ra nếu không thể tải tệp lớp với PSVM. Một lý do có thể cho điều đó là lớp có thể đang thực hiện một giao diện hoặc mở rộng một lớp khác không có trên đường dẫn lớp. Thông thường nếu một lớp không nằm trên đường dẫn lớp, lỗi được ném biểu thị như vậy. Nhưng, nếu lớp đang sử dụng được mở rộng hoặc triển khai, java không thể tự tải lớp đó.

Tham khảo: https://www.computingnotes.net/java/error-main- class-not-find-or-load /


1
Bạn đã đọc câu trả lời được chấp nhận? Câu trả lời của bạn có thêm điều gì mới không?
Stephen C

1
@StephenC Tôi đã cố gắng tìm một lý do trong danh sách của bạn bằng cách xem các danh mục "Lý do" và điểm của chúng. Tôi không thể tìm thấy điểm phù hợp trong tiêu đề "Lý do số 1" và tiêu đề "Lý do số 2" không gần với trường hợp của tôi (vì tôi chắc chắn rằng không có vấn đề gì với chính đường dẫn lớp). Tôi đã tìm thấy lý do bằng cách thực hiện các thử nghiệm và tôi đã ngạc nhiên rằng trong trường hợp của tôi, lỗi "lớp chính không tìm thấy" đã được hiển thị vì giao diện triển khai không nằm trên đường dẫn lớp. Chắc chắn bạn có thể nói "bạn nên đọc mọi thứ được mô tả trong bài" nhưng dường như danh sách lý do của bạn có thể được cải thiện.
kẹo cao su

3

Khi chạy javavới -cptùy chọn như được quảng cáo trong Windows PowerShell bạn có thể nhận được một lỗi mà trông giống như sau:

The term `ClassName` is not recognized as the name of a cmdlet, function, script ...

Để PowerShell chấp nhận lệnh, các đối số của -cptùy chọn phải được chứa trong dấu ngoặc kép như trong:

java -cp 'someDependency.jar;.' ClassName

Hình thành lệnh theo cách này sẽ cho phép Java xử lý các đối số đường dẫn chính xác.


3

Tôi cũng gặp phải các lỗi tương tự trong khi kiểm tra kết nối JDBC Java MongoDB. Tôi nghĩ rằng thật tốt khi tóm tắt giải pháp cuối cùng của tôi trong thời gian ngắn để trong tương lai bất kỳ ai cũng có thể trực tiếp xem xét hai lệnh và rất tốt để tiếp tục.

Giả sử bạn đang ở trong thư mục tồn tại tệp Java và các phụ thuộc bên ngoài (tệp JAR).

Biên dịch:

javac -cp mongo-java-driver-3.4.1.jar JavaMongoDBConnection.java
  • -cp - đối số classpath; vượt qua tất cả các tệp JAR phụ thuộc từng cái một
  • * .java - Đây là tệp lớp Java có phương thức chính. sdsd

Chạy:

java -cp mongo-java-driver-3.4.1.jar: JavaMongoDBConnection
  • Vui lòng quan sát dấu hai chấm (Unix) / dấu phẩy (Windows) sau khi tất cả các tệp JAR phụ thuộc kết thúc
  • Cuối cùng, hãy quan sát tên lớp chính mà không có bất kỳ phần mở rộng nào (không có. Class hoặc .java)

Tất cả điều này giả định rằng 1) JavaMongoDBConnectionkhông có gói và 2) bạn không thay đổi thư mục. Đó là, để nói rằng ít nhất, mong manh. Và bằng cách không giải thích các vấn đề, nó sẽ dẫn người mới thử phương pháp này trong các tình huống không hiệu quả . Nói tóm lại, nó khuyến khích "các kỹ thuật lập trình voodoo": en.wikipedia.org/wiki/Voodoo_programming
Stephen C

3

Được rồi, đã có nhiều câu trả lời, nhưng không ai đề cập đến trường hợp quyền truy cập tệp có thể là thủ phạm.

Khi chạy, người dùng có thể không có quyền truy cập vào tệp JAR hoặc một trong các thư mục của đường dẫn. Ví dụ: xem xét:

Tập tin Jar trong /dir1/dir2/dir3/myjar.jar

Người dùng 1 sở hữu tệp JAR có thể làm:

# Running as User1
cd /dir1/dir2/dir3/
chmod +r myjar.jar

Nhưng nó vẫn không hoạt động:

# Running as User2
java -cp "/dir1/dir2/dir3:/dir1/dir2/javalibs" MyProgram
Error: Could not find or load main class MyProgram

Điều này là do người dùng đang chạy (User2) không có quyền truy cập vào dir1, dir2 hoặc javalibs hoặc dir3. Nó có thể khiến ai đó thất vọng khi User1 có thể xem các tệp và có thể truy cập vào chúng, nhưng lỗi vẫn xảy ra với User2.


2

Tôi đã gặp lỗi này sau khi thực hiện mvn eclipse:eclipse Điều này làm hỏng .classpathtập tin của tôi một chút.

Phải thay đổi dòng .classpathtừ

<classpathentry kind="src" path="src/main/java" including="**/*.java"/>
<classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>

đến

<classpathentry kind="src" path="src/main/java" output="target/classes" />
<classpathentry kind="src" path="src/main/resources" excluding="**"  output="target/classes" />

2

Tôi đã không thể giải quyết vấn đề này bằng các giải pháp được nêu ở đây (mặc dù câu trả lời đã nêu, không còn nghi ngờ gì nữa, đã xóa các khái niệm của tôi). Tôi đã đối mặt với vấn đề này hai lần và mỗi lần tôi đã thử các giải pháp khác nhau (trong IDE Eclipse).

  • Đầu tiên, tôi đã bắt gặp nhiều mainphương thức trong các lớp khác nhau trong dự án của tôi. Vì vậy, tôi đã xóa mainphương thức từ các lớp tiếp theo.
  • Thứ hai, tôi đã thử giải pháp sau:
    1. Nhấp chuột phải vào thư mục dự án chính của tôi.
    2. Đi đến nguồn sau đó dọn dẹp và gắn bó với các cài đặt mặc định và trên Kết thúc. Sau một số nhiệm vụ nền, bạn sẽ được chuyển đến thư mục dự án chính của bạn.
    3. Sau đó, tôi đóng dự án của mình, mở lại và bùng nổ, cuối cùng tôi cũng giải quyết được vấn đề của mình.

1
Xóa maincác phương pháp sẽ không khắc phục vấn đề. Không có gì sai về mặt kỹ thuật với một ứng dụng có nhiều điểm vào.
Stephen C
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.