2012-05-13 15 views
16

Tôi muốn biết thuật toán phân giải đường dẫn tương đối của phương thức dựng hình JavaFX là gì:Trường hợp nào javafx.scene.image.Image ("flower.png") tìm kiếm tệp flower.png?

  1. Ứng dụng độc lập.
  2. Ứng dụng được triển khai trên trình duyệt.
  3. Các ứng dụng được triển khai trên web.

Nếu thuật toán có thể nhìn vào nhiều vị trí, tôi muốn biết chúng là gì cho từng trường hợp triển khai ở trên.

Nếu hành vi của các ứng dụng độc lập khác nhau khi ứng dụng được đặt trong bình, tôi cũng muốn biết điều đó.

Trả lời

11

Sau đó, người dùng cung cấp đường dẫn tương đối để new Image(String url) nó sẽ là tương đối so với workdir của ứng dụng aka System.getProperty("user.dir")

  1. Đối với ứng dụng độc lập nó một thư mục mà bạn bắt đầu một ứng dụng từ
  2. Đối với ứng dụng web bắt đầu được chạy từ dòng lệnh (javaws myfxapp.jnlp) nó hoạt động theo cách tương tự như với ứng dụng độc lập
  3. Để bắt đầu plugin hoặc ứng dụng webstart được tải từ trình duyệt, bạn không thể chắc chắn chắc chắn về vị trí workdir. Nó phụ thuộc vào trình duyệt và thậm chí trên các plugin được cài đặt cho trình duyệt đó.

Vì vậy, hướng chung là: cho các ứng dụng độc lập sử dụng url giống như cách bạn sẽ sử dụng nó trong new File(String url). Đối với jnlp/plugin, hãy sử dụng url đầy đủ với giao thức hoặc cách tiếp cận Class.getResource().

Cập nhật: Xin lưu ý, hành vi này sẽ được làm rõ và thay đổi trong 2.2. Xem http://javafx-jira.kenai.com/browse/RT-18291

Các bình luận sau đây là từ RT-18.291 và vạch ra những thay đổi dành cho 2.2:

Martin Sladecek thêm một nhận xét - Tháng 15 2012 10:53 Sau khi thảo luận với Richard Bair, chúng tôi quyết định thay đổi hành vi hiện tại (không có giấy tờ) cho đường dẫn. Hiện tại, chúng được coi là tương đối user.dir. Tất cả đường dẫn, có hoặc không có dấu gạch chéo hàng đầu sẽ được giải quyết tương đối so với classpath, sẽ phù hợp với CSS và tương ứng hơn với những gì người dùng có thể mong đợi. Đối với đường dẫn tương đối user.dir, "tệp:" URL vẫn có thể được sử dụng.

+0

workdir của ứng dụng là gì? – jewelsea

+0

Địa điểm 'System.getProperty (" user.dir ")' trỏ tới :) –

+0

Rất tiếc, chỉ cần nhận thấy cập nhật của bạn về một câu hỏi. Tôi sẽ xem xét sau này. –

2

Câu trả lời là "/" nếu trường hợp bạn đang sử dụng getClass().getResourceAsStream(), tức là gốc của tệp jar của bạn (bên trong nó). Không user.dir cũng không nơi gói được lưu trữ

+0

Xin lỗi, nhưng không. Chạy mã tiếp theo: 'System.setProperty (" user.dir "," c: "); root.getChildren(). add (new ImageView (new Image ("brd.jpg"))); 'và bạn sẽ có ngoại lệ tiếp theo:' java.io.FileNotFoundException: c: \ brd.jpg' –

+0

Vâng, đúng vậy , lỗi của tôi. Tôi đã quen sử dụng getClass() getResourceAsStream() để tìm kiếm gói thay vì user.dir như bạn đã tuyên bố –

+1

, hãy cập nhật câu trả lời của bạn về trạng thái 'getClass(). GetResourceAsStream()' case để tránh những người đọc khó hiểu. –

0
  1. thư mục tìm kiếm nơi tập tin lớp học (tên của lớp getClass().getName().toString()) liên quan đến tập tin java của bạn có mặt, sao chép và dán hình ảnh của bạn có
  2. Image image=new Image(getClass().getResourceAsStream("yourImageName.jpg")); là bắt buộc.

Trong NetBeans thư mục nơi mà các lớp học có mặt NetBeansProjects/JavaFXProjectName/build/classes/PACKAGENAME/

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