Otwieranie pliku

0

Witam, mam do czynienia z Javą od niedawna. Chciałbym otworzyć plik PDF, który dodałem do mojego projektu. Robię to w ten sposób:

Desktop.getDesktop().open(new File(this.getClass().getResource("help.pdf").getFile()));

Kiedy w środowisku NetBeans uruchamiam cały projekt i klikam w guzik, który wywołuje tamtą komendę, to wszystko działa, ale kiedy zrobię Build Main Project i otwieram normalnie plik jar, to po kliknięciu w ten sam guzik nic się nie dzieje. Sprawdzałem w wierszu poleceń - wyświetla się komunikat:
java.io.FileNotFoundException: file:\C:\Users\Endru\Documents\NetBeansProjects\Projekt\dist\Projekt.jar!\help.pdf (Nazwa pliku, nazwa katalogu lub składnia etykiety woluminu jest niepoprawna)

Czy ktoś może mi powiedzieć jak prawidłowo do tego podejść?

0

Plik help.pdf nie jest w katalogu C:\Users\Endru\Documents\NetBeansProjects\Projekt\dist\Projekt.jar!\

Skopiuj tam plik i po problemie. Plik help.pdf powinien być w tym samym katalogu co odpalany jar. Jak odpalasz projekt w NetBeansie pewnie masz pdfa w katalogu projektu albo gdzieś gdzie NetBeans go szuka.

0

Dupa prawda, otwierając w ten sposób, help.pdf musi być w jarze...

0

No właśnie jest w jarze (widziałem po jego rozpakowaniu 7-zipem), ale nie otwiera się :(

0

Musisz chyba wyodrębnić plik z jara.

File tmp = File.createTempFile("help","pdf");
tmp.deleteOnExit();
OutputStream outputStream = new BufferedOutputStream(new FileOutputStream(tmp));
InputStream inputStream = Main.class.getClassLoader().getResourceAsStream("help.pdf");
int in;
while (-1 != (in = inputStream.read())){
	outputStream.write((byte) in);
}
outputStream.flush();
Desktop.getDesktop().open(tmp);
Thread.sleep(10000); //potrzebne, aby dać czas na uruchomienie, jeżeli program działa dalej to można usunąć
0

Dzięki, prawie działa :-) Trzeba było zamiast "pdf" zrobić ".pdf" bo inaczej plik nie miał rozszerzenia... Ale jest jeszcze jedna rzecz. W katalogu tymczasowym tworzony jest plik i odpala się Acrobat, ale... Plik jest używany przez moją aplikację i Acrobat nie może go otworzyć. Dopiero po zamknięciu mojego programu mogę otworzyć tego PDFa ręcznie, można to jakoś rozwiązać?

0

Dobvra. Poradziłem sobie. trzeba było jeszcze dopisać:

outputStream.close();

:) Teraz wszystko piknie działa. Dziękuję serdecznie za pomoc!

1 użytkowników online, w tym zalogowanych: 0, gości: 1