2017-01-12 4 views
2

Я хочу, чтобы мое приложение Java было таким, что, если пользователь захочет нажать кнопку, PDF откроется с использованием встроенного в компьютер PDF-ридера. PDF, который я хочу открыть, присутствует в том же пакете «приложение».Открыть файл PDF со связанной программой в JavaFX

код, который я использую

package application; 

import java.io.File; 
import javafx.application.Application; 
import javafx.application.HostServices; 
import javafx.event.ActionEvent; 
import javafx.event.EventHandler; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.layout.StackPane; 
import javafx.stage.FileChooser; 
import javafx.stage.Stage; 


public class Main extends Application { 

    @Override 
    public void start(final Stage primaryStage) { 
     Button btn = new Button(); 
     btn.setText("Load PDF"); 
     btn.setOnAction(new EventHandler<ActionEvent>() { 
      @Override 
      public void handle(ActionEvent event) { 

       File pdfFile = new File("computer_graphics_tutorial.pdf"); 
       getHostServices().showDocument(pdfFile.toURI().toString()); 
      } 
     }); 

     StackPane root = new StackPane(); 
     root.getChildren().add(btn); 

     Scene scene = new Scene(root, 300, 250); 


     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 
+0

В чем проблема? Это крушение? Это что-то отличное от того, что вы ожидали? Пожалуйста, объясните немного больше, что такое точная проблема. – n247s

ответ

3

Если файл PDF находится в том же пакете, что и файл вызывающего абонента (как вы утверждаете), затем

getHostServices().showDocument(getClass() 
    .getResource("computer_graphics_tutorial.pdf").toString()); 

должны решить эту проблему.

Метод getResource можно использовать очень гибко, чтобы находить файлы. Вот небольшое описание, как его использовать: JavaFX resource handling: Load HTML files in WebView.

+0

@ DVarga Спасибо. Оно работает. Я просто хочу знать еще одну вещь. Если я использую getHostServices() в своем классе контроллера, это не работает. Почему это так? Пример внутри этого: public void initialize (расположение URL, ресурсы ResourceBundle) {} – mistletoe

+0

Я предполагаю, что контроллер находится в другом пакете, поэтому вам нужно обновить вызов 'getResource', чтобы правильно найти файл. Ссылка в ответе поможет вам найти файл в вашей структуре проекта. – DVarga

+0

@ DVarga Большое спасибо! :) – mistletoe

Смежные вопросы