Java 调用第二个方法时出现空指针异常

Java 调用第二个方法时出现空指针异常,java,selenium,nullpointerexception,Java,Selenium,Nullpointerexception,主程序 public class signin{ public static void main(String[] args) throws Exception { util.OpenBrowser(); b.closebrowser(); } 第一个方法在类util中:openbrowser是一个方法 public class util{ public static WebDriver OpenBrowser(){ System.setPrope

主程序

public class signin{

    public static void main(String[] args) throws Exception {

    util.OpenBrowser();

    b.closebrowser();


}
第一个方法在类util中:openbrowser是一个方法

public class util{

public static WebDriver OpenBrowser(){

    System.setProperty("webdriver.chrome.driver", 
                       "D:\\Selenium\\selenium3.1\\chromedriver.exe");

    driver = new ChromeDriver();

    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

    driver.get("https://www.google.com/");
    return driver;

}
第二种方法(closebrowser)在另一个b类中

public class b  {


    static WebDriver driver;

    public static void Execute(WebDriver driver){
        homepage.phonenumber(driver).sendKeys(constant.Phonenumber);
        homepage.proceedbutton(driver).click();
    }


     public static void closebrowser(){ 
        driver.close();
     }

}
我试图调用另一个类中不同类的2个方法,然后 我得到空指针异常,并将该行指向closebroweser方法。为什么调用第二个方法时发生空指针异常


closebrowser方法只有在我没有从其他类调用openbrowser方法时才起作用。如果我在主程序本身中编写openbrowser代码,它就会工作。

您似乎错过了类b中的驱动程序实例化。您应该向类b添加方法以设置实例化驱动程序。并在main方法中调用它

public class b  {
    static WebDriver driver;

    public static void setDriver( WebDriver driver){
        b.driver = driver;
    }

    public static void Execute(WebDriver driver){

        homepage.phonenumber(driver).sendKeys(constant.Phonenumber);
        homepage.proceedbutton(driver).click();

    }


    public static void closebrowser(){  
        driver.close();         
    }
}
调用方法setDriver:

public static void main(String[] args) throws Exception {
    WebDriver driver = util.OpenBrowser();
    b.setDriver(driver);
    b.closebrowser();
}

您从未实例化过
静态WebDriverb
中的code>,因此它的值为
null
。对
null
对象(
driver.close()
)调用方法会导致
NullPointerException
。关于代码的一些注释:-在Java中,类名应始终以大写字母(
signin
->
siginin
)开头,而方法应以小写字母(
OpenBrowser
->
OpenBrowser
)开头。--方法名应始终以camelCase(
closebrowser()开头)
->
closeBrowser()
)---将每2行设为空行并不会提高代码的可读性。除了@Turing85关于命名约定的建议之外,还有一个补充:
常量。Phonenumber
应该是
常量。PHONE\u NUMBER
(contants name应该是大写的,用下划线分隔)。更多信息可以在这里找到:Adendum到我的最后一条评论:class
signin
应该重命名为
signin
。。。为什么我们只能编辑五分钟的评论-你能再解释一下吗?:)我没有在任何地方使用execute方法,我使用的是closebrowser方法。但我还是遇到了同样的问题。我在closebrowser()处遇到错误。null指针指向closebrowser方法。虽然这修复了NullPointerException,但它引入了一个语义问题:从外观上看,OP通过调用
util.OpenBrowser()
创建了一个web驱动程序,并希望通过调用
b.closebrowser()
@saman关闭这个web驱动程序。我重新编写了我的评论。我的“旧”评论很快就会自我毁灭。@prashanthiskvl请看我对你的问题的评论。我在这里解释了抛出异常的原因。