2012-03-08 70 views
21

Tôi có một dự án java hoạt động hoàn toàn tốt khi chạy nó từ bên trong Eclipse. Khi tôi cố gắng đưa nó lên hoặc là một "JAR file" hoặc "Runnable JAR file" file .jar được tạo ra, nhưng khi tôi nhấp đúp chuột vào nó để cố gắng chạy chương trình nó mang lại cho tôi một lỗi mà nóiLỗi "Không thể tìm thấy lớp chính" khi chạy jar được xuất bởi Eclipse

"Could not find the main class: package.MainClassName. Program will exit." 

Như tôi đã đề cập, Tôi đã thử xuất sang cả hai tùy chọn JAR, tôi đã chỉ định lớp chính xác mà phương thức chính ở trong và khi tôi xem qua các tệp thực sự trong tệp .jar mọi thứ có vẻ như theo thứ tự - tệp kê khai trông giống như sau:

Manifest-Version: 1.0 
Main-Class: package.MainClassName 
(blank line) 

và nằm trong thư mục META-INF. Có một thư mục với tên gói của tôi, chứa tất cả các tệp .class, bao gồm cả lớp chứa phương thức chính. Một vài tệp hình ảnh và văn bản mà tôi sử dụng cũng xuất hiện trong tệp jar.

Chương trình thực tế không quá phức tạp - đó là trò chơi "rắn" đơn giản sử dụng Swing (cộng với mã tất cả hoạt động khi chạy từ bên trong Eclipse).

Bất kỳ ý tưởng nào gây ra lỗi này và cách tôi có thể khắc phục? Hãy cho tôi biết nếu có bất kỳ thông tin nào khác mà tôi nên cung cấp.

+0

Tên đầy đủ của lớp chính là gì? Có phải 'package.MainClassName' hay cái gì khác? –

+0

nó là rắn. – scaevity

+0

['Manifesto'] (http://sites.google.com/site/drjohnbmatthews/manifesto) là một cách thuận tiện để kiểm tra tệp kê khai của bạn tại chỗ. – trashgod

Trả lời

6

Ok, vì vậy cuối cùng tôi đã làm việc đó. Nếu tôi sử dụng JRE 6 thay vì 7 thì mọi thứ đều tuyệt vời. Không có ý tưởng tại sao, nhưng nó hoạt động.

+1

Ahha, có một phiên bản xung đột, nhật thực của bạn đang sử dụng một phiên bản cao hơn, sau đó là một trên classpath. Nó xảy ra hầu hết thời gian. –

+0

bất kỳ cách nào để sửa chữa nó ngoài việc chỉ sử dụng phiên bản cũ hơn trong nhật thực? – scaevity

+0

Thay vào đó, hãy chọn cùng một phiên bản trên cả Biến Eclipse và Đường dẫn của bạn trong Biến môi trường. –

18

Xác minh rằng bạn có thể bắt đầu ứng dụng của bạn như thế:

java -cp myjarfile.jar snake.Controller 

Tôi chỉ đọc khi tôi nhấp đúp chuột vào nó - điều này nghe có vẻ giống như một vấn đề cấu hình với hệ điều hành của bạn. Bạn đang nhấp đúp vào tệp trên cửa sổ trình khám phá cửa sổ? Cố gắng chạy nó từ một giao diện điều khiển/thiết bị đầu cuối với lệnh

java -jar myjarfile.jar 

liệu đọc thêm


Tệp kê khai có kết thúc với một dòng mới. Vui lòng kiểm tra tệp của bạn, một dòng mới bị thiếu sẽ gây ra sự cố.

+0

xin lỗi, tôi quên đề cập đến nó ở trên nhưng biểu hiện được tạo ra bởi Eclipse và không bao gồm một dòng trống ở cuối (đôi khi nó bao gồm 2). – scaevity

5

Nếu bạn đã thử tạo tệp .jar theo cách thủ công thay vì sử dụng Eclipse. Hãy thử các bước sau đây, hy vọng có thể giúp:

Xét rằng cấu trúc thư mục của bạn trông như thế này:

TicTacToe(Your Project Name I mean) 
|    |     | 
src   bin    manifest.txt 
      | | 
      icons tictactoe 

Bây giờ giả sử rằng lớp học chính của tôi là BeginGame bên trong gói tictactoe, vì vậy tôi sẽ viết bên trong biểu hiện của tôi. txt nộp điều này:

Main-Class: tictactoe.BeginGame 

Bạn nhớ không gian giữa dấu hai chấm : và tên gói tức là tictactoe, và ngay lập tức sau khi BeginGame nhấn Enter và lưu tập tin.

Bây giờ trên cửa sổ lệnh của bạn đi đến vị trí của thư mục bin, tôi đang diễn tả bên cạnh tôi như sau:

C:\Mine\Eclipse\TicTacToe\bin>jar -cfm ..\tictactoe.jar ..\manifest.txt tictactoe icons 
  • Đây là số đầu tiên tức ..\tictactoe.jar được sử dụng để nói rằng tạo TicTacToe.jar một lên cấp, tức là bên trong TicTacToe Folder.
  • Đối số thứ hai ..\manifest.txt có nghĩa là tệp manifest.txt nằm ở một cấp lên, tức là bên trong TicTacToe Folder.
  • Đối số thứ ba và thứ tư tictactoeicons có nghĩa là thêm cả hai thư mục này vào tệp .jar, vì chúng được đặt bên trong bin Thư mục để chúng được sử dụng. Bây giờ nhấn Enter.

Bây giờ hãy thử chạy tệp .jar của bạn để tạo bên trong Project Folder (Thư mục TicTacToe, trong trường hợp của tôi).

Hy vọng điều này sẽ hiệu quả.

1

Bạn đã đổi tên dự án/lớp chính của mình (ví dụ: thông qua tái cấu trúc)? Nếu có, Cấu hình khởi chạy của bạn có thể được thiết lập không chính xác (ví dụ: tham khảo lớp hoặc cấu hình chính). Mặc dù tên dự án xuất hiện trong hộp thoại 'xuất khẩu jar chạy được', việc kiểm tra chặt chẽ hơn có thể tiết lộ một tên lớp chính chưa từng có.

Đến 'Properties-> Run/Debug Settings' dự án của bạn và chắc chắn rằng Launch Cấu hình của bạn (cùng sử dụng để xuất jar Runnable) được thiết lập để đúng tên của dự án lớp chính của bạn được thiết lập để name.space.of.your.project/YouMainClass.

2

Run nó như thế này trên dòng lệnh:

java -jar /path/to/your/jar/jarFile.jar 
+1

Ai đó có thể giải thích những gì sai với câu trả lời này không? Tôi không hiểu. Đây là chính xác những gì tôi sử dụng để chạy một tập tin jar khi tôi nhận được "không thể tìm thấy lỗi lớp chính" – MobileMon

+0

Cảm ơn bạn nó chỉ làm việc với tôi –

+0

Điều này làm việc cho tôi, quên "-" ở phía trước của "jar" –

0

Nhấp chuột phải vào dự án. Chuyển đến thuộc tính. Nhấp vào Cài đặt chạy/gỡ lỗi. Bây giờ xóa cấu hình chạy của lớp chính của bạn mà bạn đang cố gắng chạy. Bây giờ, khi bạn nhấn chạy lần nữa, mọi thứ sẽ hoạt động tốt.

0

Đối với netbeans người dùng mà có vấn đề này là một cách đơn giản:

1.Go để dự án của bạn và nhấp chuột phải và chọn Properties

2.Click Run và cũng nhấp vào trình duyệt.

3.Chọn khung hình bạn muốn xuất hiện lần đầu tiên.

0

Tôi đã gặp phải sự cố tương tự vào một ngày khác và phải mất nhiều ngày để nó hoạt động. Thông báo lỗi là "Không thể tìm thấy lớp chính", nhưng tôi có thể chạy jar thực thi được xuất từ ​​Eclipse trong các máy Windows khác mà không có bất kỳ vấn đề gì.

Giải pháp là cài đặt cả phiên bản x64 và x86 của cùng một phiên bản JRE. Biến môi trường đường dẫn được trỏ đến phiên bản x64. Không có lý do tại sao, nhưng nó đã làm việc cho tôi.

Các vấn đề liên quan