2014-02-10 4 views
1

У меня есть этот JavaFX код, который вызывает клиент электронной почтынестатические getHostServices метод() не может ссылаться из статического контекста

 MenuItem ri = new MenuItem("Report Issue"); 

     // Start E-Mail Client with E-Mail template and send E-Mail 
     ri.setOnAction(new EventHandler<ActionEvent>() 
     { 
      @Override 
      public void handle(ActionEvent e) 
      { 


       Application.getHostServices().showDocument("mailto:"+textField.getText()); 



      } 
     }); 

я получаю сообщение в Netbeans non-static method getHostServices() cannot be referenced from a static context

Можете ли вы сказать мне, как Я могу это решить?

P.S это решение, которое я могу удалось создать:

ri.setOnAction(new EventHandler<ActionEvent>() 
     { 
      @Override 
      public void handle(ActionEvent e) 
      { 

       Application a = new Application() { 

        @Override 
        public void start(Stage stage) 
        { 
        } 
       }; 
       final TextField textField = new TextField("[email protected]"); 
       a.getHostServices().showDocument("mailto:"+textField.getText()); 

      } 
     }); 

Все лучшие предложения?

+0

Хорошо, что бы вы ожидали от этого? Вы понимаете ошибку? Посмотрите на все связанные вопросы. –

+0

Вы получаете большое количество очень похожих вопросов и ответов, задавая свой точный вопрос. – Keppil

+0

Это не статический метод. Вызовите его в объекте Application, а не в классе. –

ответ

2

выглядит как getHostServices() не является статическим методом, определенным в классе приложения или его подклассе.

0

well make getHostServices статический метод, если он соответствует вашему дизайну, или сделать соглашение, чтобы вызвать его из нестатического метода или блока.

+0

Любой пример, пожалуйста? –

+0

например: если ваш метод определен как «public getHostServices (список параметров) {body}".Просто измените его на «public static getHostServices (список параметров) {body} и посмотрите, не исчезла ли ошибка. – Smitt

+0

Не могли бы вы вставить код здесь? –

1

Лучший способ будет создать экземпляр класса Application, чтобы использовать метод в нестатической контексте:

Применение а = новый Application();
a.getHostServices(). ShowDocument ("mailto:" + textField.getText());

или если вы хотите запустить эту программу в статическом контексте, измените getHostServices() метод:

общественные пустоты getHostServices() {...}
к чему-то вроде
государственной статической силы getHostServices () {...}

(изменить) как Джеймс указывает, что мой ответ был бессмыслицей для FX; вы не можете изменять приложение, а создание экземпляров не имеет никакого смысла. Если ваша программа расширяет приложение, попробуйте просто удалить «Приложение». от вашего первого кода, так как ваша программа наследует метод getHostServices().

+0

Поскольку это вопрос JavaFX, кажется, что OP ссылается на класс javafx.application.Application. Этот класс не должен быть создан разработчиком, а инфраструктурой JavaFX –

+0

Я должен признать ... – user1813222

+0

так что «getHostServices(). ShowDocument (« mailto: »+ textField.getText());» - это решение (при условии, что программа расширяет приложение) – user1813222

0

Я использую код таким образом:

public class App extends Application { 
    private static App mInstance; 
    public static void main(String[] args) throws Exception { launch(args); } 

    public static App getInstance() { 
     return mInstance; 
    } 

    @Override 
    public void start(Stage primaryStage) throws Exception { 
     // your code 
    } 
} 

и вы можете получить его в любом месте вашего приложения, как этот

HostServices services = App.getInstance().getHostServices(); 
services.showDocument(url); 
0

Допустим, что ваш адрес электронной почты гиперссылкой:

@FXML 
private Hyperlink emailLink; 

Затем в классе контроллера вы можете добавить (с лямбдой):

@Override 
    public void initialize(URL arg0, ResourceBundle arg1) { 

     emailLink.setOnAction(t -> { 
      Application application = new Application() { 
       @Override 
       public void start(Stage primaryStage) throws Exception { 

       } 
      }; 
      application.getHostServices().showDocument("mailto:"+textField.getText()"); 
     }); 
    } 
Смежные вопросы