繁体   English   中英

非静态方法getHostServices()不能从静态上下文中引用

[英]non-static method getHostServices() cannot be referenced from a static context

我有这个调用电子邮件客户端的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获取消息non-static method getHostServices() cannot be referenced from a static context

你能告诉我怎么解决这个问题吗?

PS这是我可以创建的解决方案:

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());

            }
        });

有更好的建议吗?

看起来像getHostServices()不是Application类或其子类中定义的静态方法。

我以这种方式使用代码:

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);

最好的方法是实例化您的Application类以在非静态上下文中使用该方法:

应用a = new Application();
。a.getHostServices()showDocument( “电子邮件地址:” + textField.getText());

或者如果要在静态上下文中运行此程序,请更改getHostServices()方法:

public void getHostServices(){...}
喜欢的东西
public static void getHostServices(){...}

(编辑)詹姆斯指出我的回答是FX的无稽之谈; 你不能修改应用程序,并且实例化没有任何意义。 如果您的程序扩展了Application,那么尝试简单地删除“Application”。 从您的第一个代码开始,因为您的程序继承了getHostServices()方法。

如果它适合您的设计,那么可以使getHostServices成为静态方法,或者安排从非静态方法或块中调用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM