Utknąłem ponownie na problem dotyczący SWT za pomocą Java RCP.

Czego chcę :

Mam kompozyt, w którym chcę załadować obraz.

Jak obecnie się skończy:

W tym celu używam etykiety SWT i wywołaj metodę SetImage (Image). Obraz (img.jpg) znajduje się w katalogu o nazwie / img / obok / src / jeden. Katalog jest dodawany na ścieżce kompilacji. Oto ekran, który ma zilustrować: Katalogi

Nazywam ten obraz w następujący sposób:

InputStream is = getClass().getClassLoader().getResourceAsStream("/img/img.jpg");
ImageData imageData = new ImageData(is);
Label label = new Label(picRoom, SWT.NONE);
label.setImage(new Image(display, imageData));

Jaki jest problem ? :

Po raz kolejny, kiedy uruchomię projekt, wszystko idzie w prawo. Ładuje się i wyświetla doskonale. Ale kiedy go eksportuję, obraz już nie jest. Problem dotyczy rzeczywiście ścieżki. Kiedy robię obraz jako new Image(display, absolutePathToTheImage), go ładuje, nawet jeśli jest eksportowany. Ale chcę obrazu w / IMG / Directory, ponieważ jeśli uruchomię projekt z .exe z innego komputera, chcę, aby mieć zdjęcie, gdziekolwiek jest (tak w / IMG /).

Próbowałem wielu rozwiązań w całym Internecie (w szczególności przy użyciu adresu URL), ale nikt nie pracował. A jak powiedziałem, potrzebuję obrazu, który będzie w / img / katalog i wziąć ścieżkę względną. I oczywiście pracować po eksporcie projektu jako .exe.

Z góry dziękuję.

Kosnyru.

0
Kosnyru 16 luty 2017, 19:33

2 odpowiedzi

Najlepsza odpowiedź

Najpierw upewnij się, że jesteś katalog img jest zawarty w build.properties zawiera tak, że jest włączony do eksportowanej wtyczki.

Następnie użyj klasy FileLocator, aby znaleźć obraz za pomocą względnej ścieżki:

// Your plugin's bundle - there are several ways to get this
Bundle bundle = FrameworkUtil.getBundle(getClass());

// Relative path in the plugin
String path = "/img/img.jpg";

URL url = FileLocator.find(bundle, new Path(path), null);

ImageDescriptor imageDesc = ImageDescriptor.createFromURL(url);

Image image = imageDesc.createImage();
0
greg-449 16 luty 2017, 16:47

Zakładając, że plik jest w katalogu resources, możesz zrobić coś w rodzaju:

JLabel label = new JLabel(new ImageIcon(this.getClass().getResource("/logo.png")));
0
realpac 23 listopad 2017, 06:14