2011-01-19 25 views
1

我试图在通过我的Java应用程序加载的DOM html页面上执行名为“returnAllLinkTexts()”的Javascript函数。下面的行是由Swing Buton执行的。尝试执行Javascript时线程“AWT-EventQueue-0”中的异常java.lang.NullPointerException

myscript = browser.executeJavascript("returnAllLinkTexts()").toString(); //Line 407 

有一段时间我得到以下例外。 Java应用程序不会终止或崩溃。

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException com.demo.Main$BigButtonListener.actionPerformed(Main.java:407) 

我曾尝试以下,以保持重试的20倍左右,但它甚至没有达到这个地步。例外的是@ 407

int st = 0; 
while (myscript == null){ 
myscript = browser.executeJavascript("gogo()").toString();        if (myscript != null) break; 
if (shit == 20) break; 
sht++; 
} 

UPDATE立即提出:

这是JavaScript函数returnAllLinkTexts();

function returnAllLinkTexts(){ 
var mydata = new Array(); 

$('a', document).each(function() { 
    mydata.push($(this).text()); 
}); 

return mydata; 
} 

回答

1

我能想到为什么returnAllLinkTexts是打破的唯一的事情(因此您将收到null)是当jQuery的加载之前,它被称为。

如果可能,请在页面完成加载后尝试调用browser.executeJavascript否则检查null是否与其他人已经建议的一样,并且可以继续尝试调用它(例如使用计时器),直到它不为空为止。

编辑:既然你已经使用的返回值的字符串,可以返回字符串开始,例如:

return mydata.join(","); 

将返回逗号分隔的链接文字。

+0

这是正确的方向,但jQuery已经加载。这个Java异常似乎只在使用returnAllLinkTexts的时候发生....如果它只是一个简单的文本,那么就没有Java NullPointerExceptions ....我试图调用它100个循环,花了大约一分钟,但它仍然是空的。 ...然后其他时间工作正常......现在完全沮丧。 – KJW 2011-01-19 12:17:06

0

不要无条件的返回值调用toString(),这可能是空值。总是先检查null!

1

您对可能为null的对象调用toString()。

- >首先,我想用try-catch块

围绕但问题是为什么返回值可能为空? 检查函数的返回值 ..

努尔

+0

我已经提供了上面的功能....但我不明白它为什么会返回null。有100%的确定性页面上的链接。 – KJW 2011-01-19 09:12:10

相关问题