我有这个调用电子邮件客户端的JavaFX代码
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("help@example.com");
a.getHostServices().showDocument("mailto:"+textField.getText());
}
});
有更好的建议吗?
答案 0 :(得分:2)
看起来像getHostServices()不是Application类或其子类中定义的静态方法。
答案 1 :(得分:1)
最好的方法是实例化您的Application类以在非静态上下文中使用该方法:
申请a =新申请();
。a.getHostServices()showDocument( “电子邮件地址:” + textField.getText());
或者如果要在静态上下文中运行此程序,请更改getHostServices()方法:
public void getHostServices(){...}
对于像
public static void getHostServices(){...}
(编辑) 正如詹姆斯指出我的回答是FX的无稽之谈;你不能修改应用程序,并且实例化没有任何意义。 如果您的程序扩展了Application,那么尝试简单地删除“Application”。从您的第一个代码开始,因为您的程序继承了getHostServices()方法。
答案 2 :(得分:1)
我以这种方式使用代码:
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);
答案 3 :(得分:0)
如果getHostServices符合您的设计要求,或者安排从非静态方法或块中调用它,那么请将其设为静态方法。
答案 4 :(得分:0)
假设您的电子邮件超链接是:
@FXML
private Hyperlink emailLink;
然后在您的控制器类中,您可以添加(使用lambda):
@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()");
});
}