Điều gì gây ra lỗi không thể truy cập lỗi jarfile?


135

Tôi muốn thực hiện chương trình của mình mà không cần sử dụng IDE. Tôi đã tạo một tệp jar và một tệp jar có thể xuất hiện. Khi tôi nhấp đúp vào tệp jar exe, không có gì xảy ra và khi tôi cố gắng sử dụng lệnh trong cmd, nó sẽ cho tôi điều này:

Error: Unable to access jarfile <path>

Tôi sử dụng lệnh: java -jar Calculator.jar

Cách tôi tạo bình:

  1. Nhấp chuột phải vào thư mục dự án (Máy tính)
  2. Lựa chọn
  3. Nhấp vào Thư mục Java và chọn "Tệp Jar chính xác", sau đó chọn tiếp theo
  4. Cấu hình khởi chạy: Chính - Máy tính
  5. Tạo điểm đến xuất khẩu
  6. Nhấn "Kết thúc" và lợi nhuận! Vâng, không thực sự.

1
Âm thanh như Jar bị hỏng theo một cách nào đó, có thể thiếu mục nhập Manifest.
MadProgrammer

Bạn nên chỉ ra cách bạn tạo JAR, những gì trong chúng và cách bạn cố gắng chạy chương trình. Mã Java không liên quan ở đây.
Jochen

Bạn đã thử khởi động lại elcipse và biên dịch lại chưa? Đôi khi Eclipse có một số điều kỳ lạ có thể tránh được bằng cách khởi chạy lại.
MattS

Tôi thấy mã khó đọc và suy nghĩ. Và điểm quan trọng của việc có mọi thứ trong một chức năng chính tĩnh và có một phương thức cá thể duy nhất để xóa giao diện điều khiển là gì?
Dave Newton

1
Tôi không có câu trả lời cho vấn đề của mình, tôi đã tự trả lời và không có cách nào để thể hiện sự đánh giá cao của tôi trong các bình luận, ngoài việc cảm ơn họ qua trả lời. Vui lòng đọc lại bình luận của bạn.
Joseph Smith

Câu trả lời:


78

Tôi đã gặp phải vấn đề này khi tôi chạy tệp Jar của mình dưới dạng

java -jar TestJar

thay vì

java -jar TestJar.jar

Thiếu phần mở rộng .jar cũng gây ra vấn đề này.


1
Đây là câu trả lời chính xác. Phần mở rộng .jar phải được thêm vào tên tệp jar.
Abhijay Kumar

10
Đó không phải lúc nào cũng là câu trả lời chính xác, tôi đang nối nó và nó không hoạt động.
Alan B

Trong trường hợp của tôi, tôi nghĩ rằng đó là một tập tin trong khi nó là một thư mục trên bàn điều khiển. Tệp jar nằm trong một thư mục có cùng tên.
Willy Makend

58

đã sửa

Tôi chỉ đặt nó trong một thư mục khác và nó hoạt động.


62
Ai đó có thể giải thích tại sao điều này xảy ra?
Anastasios Andronidis

7
Âm thanh như nó có thể là một vấn đề quyền tập tin, tuy nhiên tổng số đoán.
Aiden Fry

2
Tôi đã có một vấn đề tương tự trên WIndows, sử dụng cygwin. Vì vậy, cygwin sử dụng các đường dẫn khác với windows /cygdrive/c/C:\ tôi đã sửa lỗi này bằng cách sử dụng realpath --relative-to=$(pwd) path/to/jarfileVì vậy, nó sẽ luôn thực thi một đường dẫn tương đối bằng cách sử dụng/cygdrive/c/.../path/to/jarfile
Rik

1
Tôi cũng gặp vấn đề tương tự, với chiếc bình của tôi cũng vậy, tôi đã vô tình nhầm đường dẫn của chiếc bình
Ori W Diesel

1
@Rik Nhận xét của bạn rất hữu ích mặc dù nó sẽ không hoạt động trong các đường dẫn dos và tệp java trong đường dẫn cygwin. Giải pháp ở đây sẽ làjava -jar $(cygpath -a -d `realpath --relative-to=$(pwd) $HOME/opt/javafile.jar`)
cy8g3n

31

[Chỉ có thể là Windows]

Cẩn thận với các khoảng trắng trong đường dẫn, ngay cả khi jar của bạn nằm trong thư mục làm việc hiện tại. Ví dụ, đối với tôi điều này đã thất bại:

java -jar myjar.jar

Tôi đã có thể khắc phục điều này bằng cách đưa đường dẫn đầy đủ, được trích dẫn vào jar:

java -jar "%~dp0\myjar.jar" 

Tín dụng đi đến câu trả lời này để đặt tôi vào con đường đúng ....


Cảm ơn vì điều đó. Cũng cần cung cấp đường dẫn đầy đủ trong Linux, nếu cố gắng chạy nó từ một thư mục khác.
Pubudu

Câu trả lời này một phần là một bản sao của một câu trả lời đã được đưa ra cho câu hỏi này. Đây là câu trả lời trước đó với cùng một phương pháp: đường dẫn được trích dẫn đầy đủ. Ngày 6 tháng 9 năm 15 bởi @benez
sophievda

18

Tôi đã có vấn đề này dưới CygWin trong Windows. Tôi đã đọc ở nơi khác rằng Java không hiểu các đường dẫn CygWin ( /cygdrive/c/some/dirthay vì C:\some\dir) - vì vậy tôi đã sử dụng một đường dẫn tương đối thay thế : ../../some/dir/sbt-launch.jar.


Tôi đã có vấn đề chính xác này trong CygWin! Cảm ơn bạn mãi mãi!
Rhyuk

1
Trong trường hợp bạn cần cygwin sử dụng các đường dẫn được định dạng của windows thay vì các đường dẫn cygwin, bạn có thể sử dụng lệnh cygpath -w / path / here để chuyển đổi đường dẫn sang các cửa sổ tương đương.
Jason Slobotski

@JasonSlobotski cảm ơn vì tiền boa, tôi nghĩ nhận xét của bạn nên tự trả lời.
Roberto Bonvallet

14

Tôi gặp vấn đề tương tự khi cố gắng khởi chạy tệp jar. Đường dẫn chứa một khoảng trắng, vì vậy tôi phải đặt dấu ngoặc kép xung quanh. Thay vì:

java -jar C:\Path to File\myJar.jar

tôi đã phải viết

java -jar "C:\Path to File\myJar.jar"

Các trích dẫn đã lừa tôi vì tôi cũng có khoảng cách giữa. Sau đó tôi đã thử nó mà không có khoảng trắng trên đường dẫn và không có dấu ngoặc kép và sau đó nó cũng hoạt động
Timothy

Anno 2019: Giải pháp này đã giúp tôi, với dấu ngoặc kép! Không có dấu ngoặc kép và không có khoảng trắng, nó không hoạt động trong trường hợp của tôi.
sophievda

11

Cũng gặp phải vấn đề tương tự khi cố gắng tạo ra một USB tồi ...

Tôi đã cố chạy lệnh này trong quản trị cmd

java -jar c:\fw\ducky\duckencode.jar -I c:\fw\ducky\HelloWorld.txt  -o c:\fw\ducky\inject.bin

Nhưng đã nhận được lỗi này:

Error: unable to access jarfile c:\fw\ducky\duckencode.jar

Giải pháp

Bước 1

Nhấp chuột phải vào jarfile trong câu hỏi. Nhấp vào thuộc tính. Nhấp vào tab bỏ chặn ở góc dưới bên phải. Các tập tin đã bị chặn, bởi vì nó đã được tải xuống và không được tạo trên PC của tôi.

Bước 2

Trong cmd tôi đã thay đổi thư mục thành nơi chứa tệp jar.

cd C:\fw\ducky\

Sau đó tôi gõ dirvà thấy tập tin được đặt tênduckencode.jar.jar

Vì vậy, trong cmd tôi đã thay đổi lệnh ban đầu để tham chiếu tệp với .jar.jar

java -jar c:\fw\ducky\duckencode.jar.jar -I c:\fw\ducky\HelloWorld.txt  -o c:\fw\ducky\inject.bin

Lệnh đó được thực thi mà không có thông báo lỗi và tệp tiêm.bin mà tôi đang cố gắng tạo giờ nằm ​​trong thư mục.

Hi vọng điêu nay co ich.


Cảm ơn, tôi cũng được đặt tên là apktool.jar.jar
Mayank Kumar

8

Tôi đã gặp vấn đề tương tự và tôi thậm chí đã thử chạy CMD của mình với quyền quản trị viên, nhưng nó không giải quyết được vấn đề.

Điều cơ bản là đảm bảo thay đổi Thư mục trong cmd thành thư mục hiện tại có tệp jar của bạn.

Thực hiện các bước sau:

1.Copy tệp jar vào máy tính để bàn.

  1. Chạy CMD

  2. gõ lệnh cd desktp

  3. sau đó gõ java -jar filename.jar

Điều này nên làm việc.


Chỉnh sửa : Từ JDK-11 trở đi ( JEP 330 : Khởi chạy các chương trình mã nguồn tệp đơn)

Kể từ Java 11, công cụ dòng lệnh java đã có thể chạy mã nguồn một tệp trực tiếp. ví dụ

java filename.java


5

Nếu bạn đang sử dụng OSX, các tệp đã tải xuống được gắn thẻ bảo mật để ngăn các ứng dụng chưa ký chạy.

để kiểm tra điều này, bạn có thể xem các thuộc tính mở rộng trên tệp

$ ls -l@
-rw-r--r--@ 1 dave  staff  17663235 13 Oct 11:08 server-0.28.2-java8.jar
com.apple.metadata:kMDItemWhereFroms         619
com.apple.quarantine          68

Sau đó bạn có thể xóa các thuộc tính với

xattr -c file.jar


3

Nó cũng có thể xảy ra nếu bạn không cung cấp đúng danh sách các tham số của mình. Đây là những gì tôi đã làm:

java -jar test@gmail.com testing_subject file.txt test_send_emails.jar

Thay vì phiên bản chính xác:

java -jar test_send_emails.jar test@gmail.com testing_subject file.txt

3

đôi khi nó xảy ra khi bạn cố gắng (chạy hoặc tạo) một tệp .jar trong thư mục / libs bằng cách nhấp chuột phải vào studio trong android. bạn có thể chọn danh sách thả xuống trong top stuio của Android và thay đổi nó thành ứng dụng . Điều này sẽ làm việc

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


2

Đối với tôi, điều đó xảy ra nếu bạn sử dụng ký tự tiếng Ba Lan bản địa trong tên người dùng trong PATH. Vì vậy, có thể sử dụng ký tự không điển hình là lý do của vấn đề.


2

Vấn đề cụ thể của tôi là do tôi đang làm việc với các thư mục liên quan đến các liên kết tượng trưng (phím tắt). Do đó, cố gắng java -jar ../../myJar.jarkhông làm việc bởi vì tôi không phải là nơi tôi nghĩ tôi đang ở.

Bỏ qua các đường dẫn tệp tương đối đã sửa nó ngay.


2

Trong trường hợp của tôi, tên tệp được đề xuất sẽ được sử dụng là jarFile*.jartrong dòng lệnh. Các tập tin trong thư mục là jarFile-1.2.3.jar. Vì vậy, tôi đổi tên tập tin thành jarFile. Sau đó, tôi đã sử dụng jarFile.jarthay vì jarFile*.jarvà sau đó vấn đề đã được giải quyết


Sau khi làm điều này, tôi không thể truy cập vấn đề tệp jar.
Phát triển

2

Nó có thể xảy ra trên một máy tính windows khi bạn có khoảng trắng trong tên của thư mục. Giải pháp sẽ là nhập đường dẫn giữa "". Ví dụ:

java -jar c:\my folder\x.jar    --> 
java -jar "c:\my folder\x.jar"

2
Điều này không trả lời câu hỏi, bạn nên sử dụng ý kiến ​​để hỏi thêm thông tin.
AWD

2

Để tránh mọi vấn đề về quyền, hãy thử chạy nó với tư cách quản trị viên. Điều này làm việc cho tôi trên Win10.


Còn mac thì sao?
GvSharma

2

Tôi biết chủ đề này là nhiều năm trước và vấn đề đã được sửa chữa quá. Nhưng tôi hy vọng điều này sẽ giúp người khác trong tương lai vì tôi đã gặp một số vấn đề tương tự trong khi tôi cố gắng cài đặt Oracle WebLogic 12c và Oracle OFR trong đó trình cài đặt của nó có .jarđịnh dạng. Đối với trường hợp của tôi, nó không bao bọc thư mục JDK trong dấu ngoặc kép hoặc chỉ đơn giản là lỗi đánh máy.

Chạy Command Promptvới tư cách quản trị viên và thực hiện lệnh theo định dạng này. Kiểm tra lại câu nếu có lỗi đánh máy.

"C:\Program Files\Java\jdk1.xxxxx\bin\java" -jar C:\Users\xxx\Downloads\xxx.jar

Nếu nó hiển thị giống như vậy JRE 1.xxx is not a valid JDK Java Home, hãy đảm bảo các biến Hệ thống JAVA_HOMEtrong Biến môi trường đang trỏ đến thư mục JDK chính xác. Nên dùng JDK 1.8 trở lên (2018).

Một chủ đề hữu ích ở đây, bạn có thể tham khảo nó: Tại sao nó hiển thị JDK c: tệp chương trình \ java \ jre7 không phải là JDK hợp lệ trong khi khởi động máy chủ weblogic?


1

Tôi đã có một vấn đề tương tự trong đó TextMate hoặc một cái gì đó thay thế dấu ngoặc kép bằng dấu ngoặc kép unicode.

Thay đổi của tôi SELENIUM_SERVER_JARtừ dấu ngoặc kép unicode thành dấu ngoặc kép thông thường và điều đó đã giải quyết vấn đề của tôi.


1

điều này là do bạn đang tìm kiếm tệp trong đường dẫn sai 1. tìm đường dẫn của thư mục nơi bạn đã đặt tệp 2. thay đổi thư mục cd trong cmd sử dụng đúng đường dẫn


1

Tôi sử dụng NetBeans và có cùng một vấn đề. Sau khi tôi chạy xây dựng và làm sạch dự án, chương trình của tôi đã được thực thi. Tài liệu Java nói rằng lệnh build / clean là để xây dựng lại dự án từ đầu về cơ bản và loại bỏ mọi biên dịch trong quá khứ. Tôi hi vọng cái này giúp được. Ngoài ra, tôi sẽ đọc tài liệu. Oracle có các đường học tập NetBeans và Java. Rất hữu ích. Chúc may mắn!


1

Có thể bạn đã chỉ định phiên bản sai của bình của bạn.


1

Cuối cùng tôi đã dán tệp jar của mình vào cùng thư mục với JDK của mình để tôi không phải bao gồm các đường dẫn. Tôi cũng đã phải mở dấu nhắc lệnh với tư cách quản trị viên.

  1. Nhấp chuột phải vào Dấu nhắc Lệnh và "Chạy với tư cách quản trị viên"
  2. Điều hướng đến thư mục mà bạn đã lưu jdk của mình vào
  3. Trong dấu nhắc lệnh: java.exe -jar <jar file name>.jar

1

Giữ tập tin trong cùng thư mục mà bạn đang giải nén nó. Điều đó làm việc cho tôi.


0

Bạn đã thử chạy nó dưới quyền quản trị viên chưa? nghĩa là chạy lệnh trong "Run As" và sau đó chọn quản trị viên với thông tin quản trị phù hợp

đã làm cho tôi


0

Tôi đã thử điều này:

Sau khi cho tệp đọc, viết, thực thi các đặc quyền:

chmod 777 java-repl.jar

alias jr="java -jar $HOME/Dev/java-repl/java-repl.jar"

Không thể truy cập bla bla ..., điều này đã có trên Mac OS

Vì vậy, tôi đã thử điều này:

alias jr="cd $HOME/Dev/java-repl/ && java -jar java-repl.jar"


0

Điều này không hoạt động "Không thể truy cập jarfile"

"C:\Program Files\java\jdk-13+33-jre\bin\javaw.exe" -jar "C:\Program Files\Maxim Integrated Products\1-Wire Drivers x64\ OneWireViewer.jar"

Cái này không hoạt động

"C:\Program Files\java\jdk-13+33-jre\bin\javaw.exe" -jar "C:\Program Files\Maxim Integrated Products\1-Wire Drivers x64\OneWireViewer.jar"

Sự khác biệt là không gian duy nhất ở phía trước OneWireViewer.jar không chịu được rằng nó được bao quanh với dấu ngoặc kép và thậm chí có các không gian khác.


0

Đối với tôi điều đó xảy ra bởi vì tôi chạy nó với phiên bản java mặc định (7) chứ không phải với phiên bản java đã biên dịch (8) được sử dụng để tạo tệp jar này.

Vì vậy, tôi đã sử dụng:

%Java8_64%\bin\java -jar myjar.jar

Thay vì phiên bản java 7:

java -jar myjar.jar

0

Nếu bạn đang sử dụng WSL và làm theo hướng dẫn, hãy nói điều này:

java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb

Bạn thực sự cần chỉ định đường dẫn đầy đủ, mặc dù bạn đã cung cấp nó trong java.library.pathphần này.

java -Djava.library.path=/mnt/c/dynamodb_local/DynamoDBLocal_lib -jar /mnt/c/dynamodb_local/DynamoDBLocal.jar -sharedDb

-1

đầu tiên tôi tạo một biến %JAVA_HOME% :

Khi bạn đã tải xuống tệp, hãy đảm bảo kiểm tra UNBLOCK TABcác thuộc tính tệp như được hiển thị ở trên trong bài đăng "maartencls".

c:\users\my user\downloads\location of the file\all> java -jar yourfilename.jar

hy vọng điều này sẽ giải quyết vấn đề :)


-1

Lần chạy đầu tiên: java -version

và sau đó chạy: java -jar Calculator.jar

Điều này làm việc cho tôi.


Không chắc chắn tại sao java -versioncần thiết ở đây? Ngoài ra, chạy java -jar Calculator.jarlà những gì OP đã làm và không hoạt động ....
ArielGro
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.