Lỗi “Không thể tìm thấy biểu tượng” hoặc “Không thể giải quyết biểu tượng” nghĩa là gì?

Sep 07 2014

Vui lòng giải thích những điều sau về lỗi "Không thể tìm thấy biểu tượng", "Không thể giải quyết biểu tượng" hoặc "Không tìm thấy biểu tượng":

  • Có ý nghĩa gì?
  • Những điều gì có thể gây ra chúng?
  • Lập trình viên sẽ sửa chúng như thế nào?

Câu hỏi này được thiết kế để bắt đầu một câu hỏi và đáp toàn diện về các lỗi biên dịch phổ biến này trong Java.

Trả lời

441 StephenC Sep 07 2014 at 08:12

0. Có sự khác biệt nào giữa hai lỗi không?

Không hẳn vậy. "Không thể tìm thấy biểu tượng", "Không thể giải quyết biểu tượng" và "Không tìm thấy biểu tượng" đều có nghĩa giống nhau. Các trình biên dịch Java khác nhau sử dụng các cụm từ khác nhau.

1. Lỗi "Không thể tìm thấy biểu tượng" nghĩa là gì?

Thứ nhất, đó là lỗi biên dịch 1 . Nó có nghĩa có vấn đề trong mã nguồn Java của bạn hoặc có vấn đề trong cách bạn đang biên dịch nó.

Mã nguồn Java của bạn bao gồm những thứ sau:

  • Từ khóa: như true, false, class, while, và vân vân.
  • Chữ nghĩa: thích 42'X'"Hi mum!".
  • Các nhà khai thác và thẻ không tự chữ và số khác: như +, =, {, và vân vân.
  • Định danh: như Reader, i, toString, processEquibalancedElephants, và vân vân.
  • Nhận xét và khoảng trắng.

Lỗi "Không thể tìm thấy biểu tượng" là về số nhận dạng. Khi mã của bạn được biên dịch, trình biên dịch cần tìm ra ý nghĩa của mỗi và mọi định danh trong mã của bạn.

Lỗi "Không thể tìm thấy biểu tượng" có nghĩa là trình biên dịch không thể thực hiện việc này. Mã của bạn dường như đang đề cập đến điều gì đó mà trình biên dịch không hiểu.

2. Điều gì có thể gây ra lỗi "Không thể tìm thấy biểu tượng"?

Là đơn đặt hàng đầu tiên, chỉ có một nguyên nhân. Trình biên dịch đã tìm kiếm tất cả những nơi mà mã định danh cần được xác định, và nó không thể tìm thấy định nghĩa. Điều này có thể được gây ra bởi một số thứ. Những cái chung như sau:

  • Đối với số nhận dạng nói chung:

    • Có lẽ bạn đánh vần tên không chính xác; tức là StringBiulderthay vì StringBuilder. Java không thể và sẽ không cố gắng bù đắp lỗi chính tả hoặc lỗi đánh máy.
    • Có lẽ bạn đã hiểu sai trường hợp; tức là stringBuilderthay vì StringBuilder. Tất cả các mã định danh Java đều phân biệt chữ hoa chữ thường.
    • Có lẽ bạn đã sử dụng dấu gạch dưới không thích hợp; tức là mystringmy_stringkhác nhau. (Nếu bạn tuân theo các quy tắc kiểu Java, bạn sẽ được bảo vệ phần lớn khỏi sai lầm này ...)
    • Có lẽ bạn đang cố gắng sử dụng một cái gì đó đã được khai báo là "ở một nơi khác"; tức là trong một ngữ cảnh khác với nơi bạn đã ngầm yêu cầu trình biên dịch xem xét. (Một lớp khác? Một phạm vi khác? Một gói khác? Một cơ sở mã khác?)
  • Đối với các số nhận dạng nên tham chiếu đến các biến:

    • Có lẽ bạn quên khai báo biến.
    • Có lẽ khai báo biến nằm ngoài phạm vi tại thời điểm bạn đã cố gắng sử dụng nó. (Xem ví dụ bên dưới)
  • Đối với số nhận dạng phải là tên phương thức hoặc trường:

    • Có lẽ bạn đang cố gắng tham chiếu đến một phương thức hoặc trường kế thừa chưa được khai báo trong các giao diện hoặc lớp cha / tổ tiên.

    • Có lẽ bạn đang cố gắng tham chiếu đến một phương thức hoặc trường không tồn tại (tức là chưa được khai báo) trong kiểu bạn đang sử dụng; ví dụ: "someString".push()2 .

    • Có lẽ bạn đang cố gắng sử dụng một phương thức như một trường, hoặc ngược lại; ví dụ "someString".lengthhoặc someArray.length().

    • Có lẽ bạn đang nhầm lẫn khi thao tác trên một mảng hơn là phần tử mảng; ví dụ

          String strings[] = ...
          if (strings.charAt(3)) { ... }
          // maybe that should be 'strings[0].charAt(3)'
      
  • Đối với số nhận dạng phải là tên lớp:

    • Có lẽ bạn đã quên nhập lớp.

    • Có lẽ bạn đã sử dụng nhập "sao", nhưng lớp không được xác định trong bất kỳ gói nào bạn đã nhập.

    • Có lẽ bạn đã quên một newnhư trong:

          String s = String();  // should be 'new String()'
      
  • Đối với các trường hợp mà kiểu hoặc trường hợp dường như không có thành viên mà bạn mong đợi sẽ có:

    • Có lẽ bạn đã khai báo một lớp lồng nhau hoặc một tham số chung làm bóng kiểu bạn muốn sử dụng.
    • Có lẽ bạn đang phủ bóng một biến tĩnh hoặc biến thể hiện.
    • Có lẽ bạn đã nhập sai loại; ví dụ: do hoàn thành IDE hoặc tự động sửa.
    • Có lẽ bạn đang sử dụng (biên dịch ngược lại) phiên bản API sai.
    • Có lẽ bạn đã quên truyền đối tượng của mình sang một lớp con thích hợp.

Vấn đề thường là sự kết hợp của những điều trên. Ví dụ: có thể bạn đã nhập "dấu sao" java.io.*và sau đó cố gắng sử dụng Fileslớp ... mà java.niokhông phải java.io. Hoặc có thể bạn muốn viết File... đó một lớp học trong java.io.


Dưới đây là một ví dụ về cách phạm vi biến không chính xác có thể dẫn đến lỗi "Không thể tìm thấy biểu tượng":

List<String> strings = ...

for (int i = 0; i < strings.size(); i++) {
    if (strings.get(i).equalsIgnoreCase("fnord")) {
        break;
    }
}
if (i < strings.size()) {
    ...
}

Điều này sẽ đưa ra lỗi "Không thể tìm thấy biểu tượng" itrong ifcâu lệnh. Mặc dù chúng ta đã khai báo trước đó i, nhưng khai báo đó chỉ nằm trong phạm vi của forcâu lệnh và phần thân của nó. Tham chiếu đến itrong ifcâu lệnh không thể nhìn thấy phần khai báo đó i. Nó nằm ngoài phạm vi .

(Một sửa chữa thích hợp ở đây có thể là di chuyển ifcâu lệnh bên trong vòng lặp hoặc khai báo itrước khi bắt đầu vòng lặp.)


Dưới đây là một ví dụ gây ra sự khó hiểu trong đó lỗi đánh máy dẫn đến lỗi "Không thể tìm thấy biểu tượng" dường như không thể giải thích được:

for (int i = 0; i < 100; i++); {
    System.out.println("i is " + i);
}

Điều này sẽ cung cấp cho bạn một lỗi biên dịch trong printlncuộc gọi nói rằng ikhông thể tìm thấy. Nhưng (tôi nghe bạn nói) Tôi đã khai báo!

Vấn đề là dấu chấm phẩy lén lút ( ;) trước {. Cú pháp ngôn ngữ Java định nghĩa dấu chấm phẩy trong ngữ cảnh đó là một câu lệnh trống . Sau đó câu lệnh rỗng trở thành phần thân của forvòng lặp. Vì vậy, mã đó thực sự có nghĩa là:

for (int i = 0; i < 100; i++); 

// The previous and following are separate statements!!

{
    System.out.println("i is " + i);
}

Các { ... }khối KHÔNG phải là cơ thể của forvòng lặp, và do đó việc khai báo trước đó của itrong fortuyên bố là ra khỏi phạm vi trong khối.


Đây là một ví dụ khác về lỗi "Không thể tìm thấy biểu tượng" do lỗi đánh máy.

int tmp = ...
int res = tmp(a + b);

Mặc dù đã khai báo trước, tmpnhưng tmp(...)biểu thức trong biểu thức là sai. Trình biên dịch sẽ tìm kiếm một phương thức được gọi tmpvà sẽ không tìm thấy một phương thức. Đã khai báo trước đó tmpnằm trong vùng tên cho các biến, không phải vùng tên cho các phương thức.

Trong ví dụ mà tôi đã xem qua, lập trình viên đã thực sự bỏ qua một toán tử. Ý anh ấy muốn viết là:

int res = tmp * (a + b);

Có một lý do khác khiến trình biên dịch có thể không tìm thấy ký hiệu nếu bạn đang biên dịch từ dòng lệnh. Đơn giản là bạn có thể đã quên biên dịch hoặc biên dịch lại một số lớp khác. Ví dụ, nếu bạn có các lớp học FooBarnơi Foosử dụng Bar. Nếu bạn chưa bao giờ biên dịch Barvà bạn chạy javac Foo.java, bạn có trách nhiệm nhận thấy rằng trình biên dịch không thể tìm thấy ký hiệu Bar. Câu trả lời đơn giản là biên dịch FooBarcùng nhau; ví dụ javac Foo.java Bar.javahoặc javac *.java. Hoặc tốt hơn là vẫn sử dụng một công cụ xây dựng Java; ví dụ như Ant, Maven, Gradle, v.v.

Có một số nguyên nhân khác khó hiểu hơn ... mà tôi sẽ giải quyết bên dưới.

3. Làm cách nào để khắc phục những lỗi này?

Nói chung, bạn bắt đầu bằng cách tìm ra nguyên nhân gây ra lỗi biên dịch.

  • Nhìn vào dòng trong tệp được chỉ ra bởi thông báo lỗi biên dịch.
  • Xác định ký hiệu mà thông báo lỗi đang nói đến.
  • Tìm hiểu lý do tại sao trình biên dịch nói rằng nó không thể tìm thấy ký hiệu; xem ở trên!

Sau đó, bạn nghĩ về những gì mã của bạn phải nói. Sau đó, cuối cùng bạn tìm ra những gì bạn cần chỉnh sửa đối với mã nguồn của mình để làm những gì bạn muốn.

Lưu ý rằng không phải mọi "sửa sai" đều đúng. Xem xét điều này:

for (int i = 1; i < 10; i++) {
    for (j = 1; j < 10; j++) {
        ...
    }
}

Giả sử rằng trình biên dịch nói "Không thể tìm thấy biểu tượng" cho j. Có nhiều cách tôi có thể "khắc phục" điều đó:

  • Tôi có thể thay đổi bên trong forthành for (int j = 1; j < 10; j++)- có lẽ chính xác.
  • Tôi có thể thêm một khai báo cho j trướcfor vòng lặp bên trong hoặc forvòng lặp bên ngoài - có thể đúng.
  • Tôi có thể thay đổi jthành itrong forvòng lặp bên trong - có thể sai!
  • và như thế.

Vấn đề là bạn cần hiểu mã của bạn đang cố gắng làm gì để tìm ra bản sửa lỗi phù hợp.

4. Nguyên nhân ít người biết đến

Dưới đây là một số trường hợp "Không thể tìm thấy biểu tượng" dường như không thể giải thích được ... cho đến khi bạn nhìn kỹ hơn.

  1. Phần phụ thuộc không chính xác : Nếu bạn đang sử dụng IDE hoặc một công cụ xây dựng quản lý đường dẫn xây dựng và các phần phụ thuộc của dự án, bạn có thể đã mắc lỗi với phần phụ thuộc; Ví dụ: bỏ sót một phụ thuộc hoặc chọn phiên bản sai. Nếu bạn đang sử dụng một công cụ xây dựng (Ant, Maven, Gradle, v.v.), hãy kiểm tra tệp xây dựng của dự án. Nếu bạn đang sử dụng IDE, hãy kiểm tra cấu hình đường dẫn xây dựng của dự án.

  2. Bạn không biên dịch lại : Đôi khi xảy ra trường hợp các lập trình viên Java mới không hiểu cách hoạt động của chuỗi công cụ Java hoặc chưa thực hiện một "quy trình xây dựng" có thể lặp lại; ví dụ: sử dụng IDE, Ant, Maven, Gradle, v.v. Trong tình huống như vậy, lập trình viên có thể đuổi theo đuôi của mình để tìm kiếm một lỗi ảo thực sự gây ra do không biên dịch lại mã đúng cách, và tương tự như vậy ...

  3. Sự cố bản dựng trước đó : Có thể bản dựng trước đó không thành công theo cách tạo tệp JAR bị thiếu lớp. Một lỗi như vậy thường sẽ được nhận thấy nếu bạn đang sử dụng một công cụ xây dựng. Tuy nhiên, nếu bạn nhận tệp JAR từ người khác, bạn đang phụ thuộc vào việc họ xây dựng đúng cách và nhận thấy lỗi. Nếu bạn nghi ngờ điều này, hãy sử dụng tar -tvfđể liệt kê nội dung của tệp JAR đáng ngờ.

  4. Các vấn đề về IDE : Mọi người đã báo cáo các trường hợp IDE của họ bị nhầm lẫn và trình biên dịch trong IDE không thể tìm thấy một lớp tồn tại ... hoặc tình huống ngược lại.

  • Điều này có thể xảy ra nếu IDE đã được định cấu hình với phiên bản JDK sai.

  • Điều này có thể xảy ra nếu bộ nhớ đệm của IDE không đồng bộ với hệ thống tệp. Có những cách cụ thể của IDE để khắc phục điều đó.

  • Đây có thể là một lỗi IDE. Ví dụ, @Joel Costigliola mô tả một tình huống trong đó Eclipse không xử lý cây "thử nghiệm" Maven một cách chính xác: hãy xem câu trả lời này .

  1. Các vấn đề về Android : Khi bạn đang lập trình cho Android và bạn gặp phải lỗi "Không thể tìm thấy biểu tượng" liên quan đến R, hãy lưu ý rằng các Rbiểu tượng được xác định bởi context.xmltệp. Kiểm tra xem context.xmltệp của bạn có đúng và ở đúng vị trí hay không, và Rtệp lớp tương ứng đã được tạo / biên dịch chưa. Lưu ý rằng các ký hiệu Java có phân biệt chữ hoa chữ thường, vì vậy các id XML tương ứng cũng phân biệt chữ hoa chữ thường.

    Các lỗi biểu tượng khác trên Android có thể là do các lý do đã đề cập trước đó; ví dụ như phụ thuộc bị thiếu hoặc không chính xác, tên gói không chính xác, phương thức hoặc trường không tồn tại trong một phiên bản API cụ thể, lỗi chính tả / đánh máy, v.v.

  2. Định nghĩa lại các lớp hệ thống : Tôi đã thấy các trường hợp trình biên dịch phàn nàn rằng đó substringlà một ký hiệu không xác định trong một cái gì đó như sau

    String s = ...
    String s1 = s.substring(1);
    

    Hóa ra lập trình viên đã tạo phiên bản của riêng họ Stringvà phiên bản lớp của anh ta không định nghĩa substringphương thức.

    Bài học: Đừng định nghĩa các lớp của riêng bạn có cùng tên với các lớp thư viện thông thường!

  3. Homoglyphs: Nếu bạn sử dụng mã hóa UTF-8 cho các tệp nguồn của mình, có thể có các số nhận dạng trông giống nhau, nhưng thực tế là khác nhau vì chúng chứa các ký tự đồng nhất. Xem trang này để biết thêm thông tin.

    Bạn có thể tránh điều này bằng cách tự giới hạn ASCII hoặc Latin-1 làm mã hóa tệp nguồn và sử dụng Java \uxxxxthoát cho các ký tự khác.


1 - Nếu tình cờ, bạn làm thấy điều này trong một ngoại lệ thời gian chạy hoặc thông báo lỗi, sau đó hoặc là bạn đã cấu hình IDE của bạn để mã chạy với lỗi biên dịch, hoặc ứng dụng của bạn được tạo ra và biên dịch mã .. khi chạy.

2 - Ba nguyên tắc cơ bản của Kỹ thuật xây dựng: nước không chảy lên dốc, một tấm ván nằm nghiêng mạnh hơn và bạn không thể đẩy lên một sợi dây .

26 thinkterry Apr 17 2015 at 15:50

Bạn cũng sẽ gặp lỗi này nếu bạn quên new:

String s = String();

đấu với

String s = new String();

bởi vì lệnh gọi không có newtừ khóa sẽ thử và tìm một phương thức (cục bộ) được gọi Stringmà không có đối số - và chữ ký phương thức đó có thể không được xác định.

14 Jan Dec 06 2015 at 16:19

Thêm một ví dụ về 'Biến nằm ngoài phạm vi'

Như tôi đã thấy những câu hỏi kiểu đó một vài lần rồi, có thể thêm một ví dụ nữa cho những gì bất hợp pháp ngay cả khi nó có thể cảm thấy ổn.

Hãy xem xét mã này:

if(somethingIsTrue()) {
  String message = "Everything is fine";
} else {
  String message = "We have an error";
}
System.out.println(message);

Đó là mã không hợp lệ. Bởi vì cả hai biến được đặt tên messageđều không hiển thị bên ngoài phạm vi tương ứng của chúng - {}trong trường hợp này sẽ là dấu ngoặc bao quanh .

Bạn có thể nói: "Nhưng một thông báo có tên biến được xác định theo cả hai cách - vì vậy thông báo được xác định sau if".

Nhưng bạn đã nhầm.

Java không có free()hoặc không có deletetoán tử, vì vậy nó phải dựa vào phạm vi theo dõi biến để tìm ra khi nào các biến không còn được sử dụng nữa (cùng với các tham chiếu đến các biến nguyên nhân này).

Đặc biệt tồi tệ nếu bạn nghĩ rằng bạn đã làm điều gì đó tốt. Tôi đã gặp loại lỗi này sau khi "tối ưu hóa" mã như thế này:

if(somethingIsTrue()) {
  String message = "Everything is fine";
  System.out.println(message);
} else {
  String message = "We have an error";
  System.out.println(message);
}

"Ồ, có mã trùng lặp, hãy kéo dòng chung đó ra" -> và nó ở đó.

Cách phổ biến nhất để giải quyết loại rắc rối phạm vi này là gán trước các giá trị khác cho các tên biến trong phạm vi bên ngoài và sau đó gán lại trong nếu:

String message = "We have an error";
if(somethingIsTrue()) {
  message = "Everything is fine";
} 
System.out.println(message);
10 JoelCostigliola May 13 2016 at 17:09

Một cách để gặp lỗi này trong Eclipse:

  1. Xác định một lớp Atrong src/test/java.
  2. Định nghĩa một lớp khác Btrong lớp src/main/javađó sử dụng A.

Kết quả: Eclipse sẽ biên dịch mã, nhưng maven sẽ cho "Không thể tìm thấy biểu tượng".

Nguyên nhân cơ bản: Eclipse đang sử dụng một đường dẫn xây dựng kết hợp cho cây chính và cây thử nghiệm. Thật không may, nó không hỗ trợ sử dụng các đường dẫn xây dựng khác nhau cho các phần khác nhau của dự án Eclipse, đó là điều mà Maven yêu cầu.

Giải pháp :

  1. Đừng xác định sự phụ thuộc của bạn theo cách đó; tức là không mắc lỗi này.
  2. Thường xuyên xây dựng cơ sở mã của bạn bằng Maven để sớm nhận ra sai lầm này. Một cách để làm điều đó là sử dụng máy chủ CI.
5 GT_hash Jun 30 2018 at 18:09

"Không thể tìm thấy" có nghĩa là, trình biên dịch không thể tìm thấy biến, phương thức, lớp thích hợp, v.v. nếu bạn gặp lỗi đó, trước hết bạn muốn tìm dòng mã nơi gặp lỗi. Và sau đó bạn sẽ có thể tìm thấy biến, phương thức hoặc lớp nào chưa định nghĩa trước khi sử dụng nó. Sau khi xác nhận khởi tạo biến đó, phương thức hoặc lớp có thể được sử dụng cho các yêu cầu sau này ... Hãy xem xét ví dụ sau.

Tôi sẽ tạo một lớp demo và in tên ...

class demo{ 
      public static void main(String a[]){
             System.out.print(name);
      }
}

Bây giờ hãy nhìn vào kết quả ..

Lỗi đó cho biết, "tên biến không thể tìm thấy" .. Việc xác định và khởi tạo giá trị cho biến 'tên' có thể được loại bỏ lỗi đó.. Thực tế như thế này,

class demo{ 
      public static void main(String a[]){

             String name="smith";

             System.out.print(name);
      }
}

Bây giờ hãy nhìn vào đầu ra mới ...

Ok Đã giải quyết thành công lỗi đó..Đồng thời, nếu bạn có thể nhận được "không thể tìm thấy phương thức" hoặc "không thể tìm thấy lớp" nào đó, Đầu tiên, hãy xác định một lớp hoặc phương thức và sau đó sử dụng ..

3 JonathanLin Mar 08 2016 at 12:58

Nếu bạn gặp lỗi này trong bản dựng ở một nơi khác, trong khi IDE của bạn cho biết mọi thứ hoàn toàn ổn, thì hãy kiểm tra xem bạn có đang sử dụng các phiên bản Java giống nhau ở cả hai nơi hay không.

Ví dụ: Java 7 và Java 8 có các API khác nhau, vì vậy việc gọi một API không tồn tại trong phiên bản Java cũ hơn sẽ gây ra lỗi này.

3 Ajay Oct 10 2019 at 19:07

GIẢI QUYẾT

Sử dụng IntelliJ

Chọn Build -> Rebuild Project sẽ giải quyết được

2 DivyaJose Sep 28 2016 at 21:59

Tôi cũng nhận được lỗi này. (mà tôi đã truy cập vào Google và tôi đã được dẫn đến trang này)

Sự cố: Tôi đang gọi một phương thức tĩnh được định nghĩa trong lớp của một dự án A từ một lớp được xác định trong một dự án khác B. Tôi gặp lỗi sau:

error: cannot find symbol

Giải pháp: Tôi đã giải quyết vấn đề này bằng cách đầu tiên xây dựng dự án nơi phương thức được xác định, sau đó là dự án nơi phương thức được gọi từ đó.

2 UdayKiranPulipati Jan 24 2019 at 18:18

Nếu đường dẫn xây dựng Eclipse Java được ánh xạ đến 7, 8 và trong thuộc tính Maven Project pom.xml java.version được đề cập là phiên bản Java cao hơn (9,10,11, v.v.,) hơn 7,8 thì bạn cần cập nhật trong pom. tệp xml.

Trong Eclipse nếu Java được ánh xạ tới Java phiên bản 11 và trong pom.xml, nó được ánh xạ tới phiên bản Java 8. Cập nhật hỗ trợ Eclipse lên Java 11 bằng cách thực hiện các bước dưới đây trong Trợ giúp IDE của nhật thực -> Cài đặt Phần mềm Mới ->

Dán liên kết sau http://download.eclipse.org/eclipse/updates/4.9-P-builds at Work With

hoặc là

Thêm (Cửa sổ bật lên sẽ mở ra) ->

Name:Hỗ trợ Java 11 Location: http://download.eclipse.org/eclipse/updates/4.9-P-builds

sau đó cập nhật phiên bản Java trong thuộc tính Maven của tệp pom.xml như bên dưới

<java.version>11</java.version>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>

Cuối cùng nhấp chuột phải vào dự án Debug as -> Maven clean, các bước xây dựng Maven

1 avp Aug 18 2018 at 08:45

Có thể có nhiều kịch bản khác nhau như mọi người đã đề cập ở trên. Một vài điều đã giúp tôi giải quyết điều này.

  1. Nếu bạn đang sử dụng IntelliJ

    File -> 'Invalidate Caches/Restart'

HOẶC LÀ

  1. Lớp đang được tham chiếu nằm trong một dự án khác và phần phụ thuộc đó không được thêm vào tệp xây dựng Gradle của dự án của tôi. Vì vậy, tôi đã thêm phần phụ thuộc bằng cách sử dụng

    compile project(':anotherProject')

va no đa hoạt động. HTH!

1 ANILKUMAR Aug 07 2019 at 11:59

bạn đã biên dịch mã của mình bằng trình biên dịch maven và sau đó sử dụng kiểm tra maven để chạy nó hoạt động tốt. Bây giờ nếu bạn thay đổi một cái gì đó trong mã của mình và sau đó không biên dịch mà bạn đang chạy nó, bạn sẽ gặp lỗi này.

Giải pháp: Một lần nữa biên dịch nó và sau đó chạy thử nghiệm. Đối với tôi, nó hoạt động theo cách này.

1 VIPINKUMAR Sep 08 2019 at 14:50

Trong trường hợp của tôi - tôi phải thực hiện các thao tác dưới đây:

  1. Di chuyển context.xmltập tin từ src/java/packageđến resourcethư mục (IntelliJ IDE)
  2. Thư mục sạch target.
Striker Sep 06 2017 at 19:47

Để biết gợi ý, hãy xem kỹ tên lớp có lỗi và số dòng, ví dụ: Lỗi biên dịch [ERROR] \ Applications \ xxxxx.java: [44,30] error: không thể tìm thấy ký hiệu

Một nguyên nhân khác là phương pháp không được hỗ trợ của phiên bản java nói jdk7 vs 8. Kiểm tra% JAVA_HOME% của bạn

sakra Jul 20 2020 at 19:31

Chúng tôi đã gặp lỗi trong một dự án Java được thiết lập như một bản dựng nhiều dự án Gradle. Hóa ra là một trong những dự án con bị thiếu plugin Thư viện Java Gradle . Điều này ngăn không cho các tệp lớp của dự án con hiển thị với các dự án khác trong bản dựng.

Sau khi thêm plugin thư viện Java vào dự án build.gradlecon theo cách sau, lỗi đã biến mất:

plugins {
    ...
    id 'java-library'
}
FelipeFranco Nov 20 2020 at 04:03

Tôi đã giải quyết lỗi này như thế này ... Sự điên rồ của android. Tôi có tên gói là Bộ điều hợp và tôi đã cấu trúc lại tên cho bộ điều hợp bằng "a" thay vì "A" và đã giải quyết được lỗi.