2010-12-12 37 views

Trả lời

6

Không thể nói chung.

Công thức được cung cấp trong câu trả lời của @ khachik sẽ không nhất thiết phải làm việc cho việc triển khai Java không phải của Sun.

  • Các java thực thi không nhất thiết phải gọi java và không nhất thiết sống trong bin thư mục con. Ngay cả với Sun Java, trên Windows có hai thực thi; javajavaw.

  • Tùy chọn lệnh cho lệnh khởi động JVM khác nhau đối với các triển khai Java khác nhau. Vì vậy, các bước ProcessBuilder có thể liên quan đến các đối số không di động.


Trong khi hầu hết các JVM đã áp dụng Sun java tùy chọn lệnh tiểu học, có rất nhiều sự khác biệt. Ví dụ:

  • IBM J9 sử dụng j9j9w làm tên thực thi.
  • BEA/Oracle JRockit có các tùy chọn -X-XX khác nhau.
  • Jikes RVM sử dụng rvm làm tên thực thi và chỉ hỗ trợ một tập hợp con của Sun java tùy chọn.
  • IKVM sử dụng ikvm làm tên thực thi.

(Lưu ý: đây chỉ là ví dụ mà nổi bật trong việc đọc lướt qua các tài liệu trực tuyến tương ứng.)

+0

Bất kỳ liên kết nào để hỗ trợ khiếu nại đầu tiên của bạn? –

10

Bạn có thể sử dụng java.home sở hữu hệ thống để tìm ra JVM hiện tại:

String jvm = new java.io.File(new java.io.File(System.getProperty("java.home"), 
               "bin"), 
           "java").getAbsolutePath(); 

và sau đó chạy nó bằng cách sử ProcessBuilder (hoặc Runtime.exec).

Lưu ý rằng đối với JDK java.home điểm vào thư mục JRE được bao gồm trong JDK.

1

Bạn đã cố gắng sử dụng các libs Apache Commons? Nếu bạn không cung cấp cho thử nghiệm launcher project. Nó khá hữu ích đối với tôi một thời gian trước đây.

Dưới đây là mô tả dự án từ trang web của họ:

Hợp phần Launcher được thiết kế để trở thành một nền tảng chéo ứng dụng Java launcher.

Các lớp Java ban đầu đến từ dự án Tomcat 4.0.

Trình khởi chạy Commons giúp loại bỏ sự cần thiết của tập lệnh bó hoặc trình bao để khởi chạy một lớp Java.Một số trường hợp có thể muốn loại bỏ tập lệnh bó hoặc tập lệnh có thể được mong muốn là:

  • Bạn muốn tránh phải xác định nơi một số đường dẫn ứng dụng nhất định, ví dụ: thư mục chính của ứng dụng của bạn, v.v. Xác định điều này một cách năng động trong các kịch bản lệnh Windows rất khó khăn trên một số phiên bản của Windows hoặc khi các liên kết mềm được sử dụng trên các nền tảng Unix.
  • Bạn muốn tránh phải xử lý tệp gốc và dấu tách đường dẫn hoặc các vấn đề trích dẫn đường dẫn gốc.
  • Bạn cần thực thi một số thuộc tính hệ thống nhất định, ví dụ: java.endorsed.dirs khi chạy với JDK 1.4.
  • Bạn muốn cho phép người dùng chuyển vào đối số JVM tùy chỉnh hoặc thuộc tính hệ thống mà không phải phân tích cú pháp và sắp xếp lại các đối số trong tập lệnh của bạn. Điều này có thể phức tạp và/hoặc lộn xộn trong hàng loạt và kịch bản shell. Bạn muốn khởi động các thuộc tính hệ thống từ tệp cấu hình thay vì mã hóa chúng trong các kịch bản lệnh shell và batch của bạn.
  • Bạn muốn cung cấp các thông báo lỗi được bản địa hoá rất phức tạp để thực hiện theo lô và kịch bản lệnh shell.
+0

Nếu tôi hiểu nó sau đó nó không giúp đỡ để bắt đầu một quá trình Java khác bất kỳ quá trình bên ngoài, nơi tôi biết thực thi. Nhưng đây là vấn đề. Tôi không biết thực thi hiện tại. – Horcrux7

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