2010-03-05 34 views
5

Tôi đang thực hiện một công cụ Ghi/Phát lại Java và tôi cần khởi chạy các ứng dụng Java từ ứng dụng Java chính của mình. Tôi cần truy cập vào EventDispatchThread để đánh chặn các sự kiện và ghi lại chúng, vì vậy tôi tung ra các ứng dụng thông qua phản ánh với (đoạn mã đơn giản):Khởi chạy ứng dụng java từ một ứng dụng java khác

Class<?> app = Class.forName(mainClass); 
Method m = app.getMethod("main", new Class[] { String[].class }); 
m.invoke(null, new Object[] { new String[] {} }); 

tôi trước động tải tất cả các lọ vào classpath và ứng dụng đang khởi chạy gần như hoàn hảo.

Sự cố xảy ra khi ứng dụng cần truy cập bất kỳ tệp nào và thực hiện với đường dẫn tương đối. Vì ứng dụng được khởi chạy thông qua ứng dụng của tôi nên đường dẫn không giống như được khởi chạy từ đường dẫn bình thường của nó và các tệp không được tìm thấy.

Tôi có thể làm gì để giải quyết vấn đề này? tự động thay đổi môi trường thực thi? bất kỳ ý tưởng?

Trả lời

2

Tôi khuyên bạn nên tải mã của mình là "Đại lý Java" trong khi bắt đầu ứng dụng đích.

(Với phương pháp của bạn, bạn cũng sẽ thấy rằng bộ nạp lớp hệ thống là sai.)

+0

tôi sẽ kiểm tra làm thế nào để chạy các mã như là một "Java Agent" và những gì mà chính xác có nghĩa. Tôi đã không hiểu được dấu ngoặc đơn của bạn, mặc dù ... – jpsstavares

0

Nói chung, không có cách nào để làm điều này.

http://bugs.sun.com/bugdatabase/view_bug.do;jsessionid=30b24551130ee4ffffffffc17df8d7ce8a9c3?bug_id=4117557

Bạn có thể thử System.setProperty("user.dir", "C:\\Some\\Location"); nhưng nó có lẽ sẽ không làm việc cho tất cả các trường hợp và sẽ cung cấp cho bạn hành vi kỳ lạ.

Thiết kế khá xấu để ứng dụng dựa vào thư mục mà từ đó nó được khởi chạy.

Lời khuyên tốt nhất tôi có thể cung cấp cho bạn là khởi chạy ứng dụng của bạn từ thư mục mà ứng dụng bị lỗi dự kiến ​​sẽ được khởi chạy (giả sử bạn biết thư mục đó là gì).

Nếu không, địa ngục, sao chép/liên kết mềm các tập tin dữ liệu vào thư mục của bạn để các ứng dụng khách hàng có thể tìm thấy chúng ...

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