Java:Yahoo Finance API:SocketException:权限被拒绝

Java:Yahoo Finance API:SocketException:权限被拒绝,java,yahoo-finance,Java,Yahoo Finance,因此,我正试图编写我的第一个程序,从网络上提取数据,由于这是一个金融程序,我决定使用(据称)简单易用的Yahoo!财经API。我下载了API.jar文件,为了保存,我通过addexternaljars工具将它们全部导入Eclipse 问题是,每当我尝试运行它时,都会出现一个SocketException:Permission Denied runtime错误 我运行的代码非常基本: Stock stock = YahooFinance.get("ORCL"); 这一行代码应该可以从雅虎金融获得

因此,我正试图编写我的第一个程序,从网络上提取数据,由于这是一个金融程序,我决定使用(据称)简单易用的Yahoo!财经API。我下载了API.jar文件,为了保存,我通过addexternaljars工具将它们全部导入Eclipse

问题是,每当我尝试运行它时,都会出现一个SocketException:Permission Denied runtime错误

我运行的代码非常基本:

Stock stock = YahooFinance.get("ORCL");
这一行代码应该可以从雅虎金融获得甲骨文(ORCL)股票的价值。相反,它抛出异常

我已经尝试了我能想到的一切:

1) 我禁用了防火墙 2) 我仔细检查了我的.jar导入 3) 我测试运行这条线作为一个单独的线程的一部分(一个绝望的,盲目的举动,但我达到了这一点)

我已经用尽了我能想到的所有可能的研究角度,到目前为止我所发现的是:

这看起来像是一个非常类似的问题,所以我尝试了建议的解决方案:在eclipse.ini文件中添加“-Djava.net.preferIPv4Stack=true”行。这似乎没有任何效果

以防万一,我也在这里粘贴eclipse.ini文件的内容,以防万一我把它放错了位置或其他什么:

-startup
plugins/org.eclipse.equinox.launcher_1.3.0.v20140415-2008.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.200.v20140603-1326
-product
org.eclipse.epp.package.standard.product
--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
256M
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
--launcher.appendVmargs
-vmargs
-Djava.net.preferIPv4Stack=true
-Dosgi.requiredJavaVersion=1.7
-Xms40m
-Xmx512m
我现在没有主意了。我只是想知道为什么会抛出这个异常,以及我能做些什么来防止它

提前谢谢

编辑:根据请求,完整堆栈跟踪

Apr 27, 2015 11:54:35 PM yahoofinance.quotes.QuotesRequest getResult
INFO: Sending request: http://finance.yahoo.com/d/quotes.csv?s=ORCL&f=nsc4xab2sa5sbb3sb6sl1sk3sd1t1opghva2kjm3m4sj2sss1sj1sf6sr1qdyee7e9e8rr5p6p5b4s6j4t8&e=.csv
Apr 27, 2015 11:54:35 PM yahoofinance.quotes.QuotesRequest getResult
SEVERE: java.net.SocketException: Permission denied: connect
java.net.SocketException: Permission denied: connect
    at java.net.DualStackPlainSocketImpl.connect0(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
    at java.net.PlainSocketImpl.connect(Unknown Source)
    at java.net.SocksSocketImpl.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at sun.net.NetworkClient.doConnect(Unknown Source)
    at sun.net.www.http.HttpClient.openServer(Unknown Source)
    at sun.net.www.http.HttpClient.openServer(Unknown Source)
    at sun.net.www.http.HttpClient.<init>(Unknown Source)
    at sun.net.www.http.HttpClient.New(Unknown Source)
    at sun.net.www.http.HttpClient.New(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
    at yahoofinance.quotes.QuotesRequest.getResult(QuotesRequest.java:83)
    at yahoofinance.YahooFinance.getQuotes(YahooFinance.java:332)
    at yahoofinance.YahooFinance.get(YahooFinance.java:76)
    at yahoofinance.YahooFinance.get(YahooFinance.java:61)
    at currency.CurrencyConverter.createWindow(CurrencyConverter.java:35)
    at currency.CurrencyConverter.<init>(CurrencyConverter.java:25)
    at currency.CurrencyDriver$1.run(CurrencyDriver.java:10)
    at java.awt.event.InvocationEvent.dispatch(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$500(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
2015年4月27日晚上11:54:35 yahoofinance.quotes.QuotesRequest getResult
信息:发送请求:http://finance.yahoo.com/d/quotes.csv?s=ORCL&f=nsc4xab2sa5sbb3sb6sl1sk3sd1t1opghva2kjm3m4sj2sss1sj1sf6sr1qdyee7e9e8rr5p6p5b4s6j4t8&e=.csv
2015年4月27日晚上11:54:35 yahoofinance.quotes.QuotesRequest getResult
严重:java.net.SocketException:权限被拒绝:连接
java.net.SocketException:权限被拒绝:连接
位于java.net.DualStackPlainSocketImpl.connect0(本机方法)
位于java.net.DualStackPlainSocketImpl.socketConnect(未知源)
位于java.net.AbstractPlainSocketImpl.doConnect(未知源)
位于java.net.AbstractPlainSocketImpl.connectToAddress(未知源)
位于java.net.AbstractPlainSocketImpl.connect(未知源)
位于java.net.PlainSocketImpl.connect(未知源)
位于java.net.socksocketimpl.connect(未知源)
位于java.net.Socket.connect(未知源)
位于java.net.Socket.connect(未知源)
位于sun.net.NetworkClient.doConnect(未知源)
位于sun.net.www.http.HttpClient.openServer(未知来源)
位于sun.net.www.http.HttpClient.openServer(未知来源)
在sun.net.www.http.HttpClient。(来源不明)
位于sun.net.www.http.HttpClient.New(未知来源)
位于sun.net.www.http.HttpClient.New(未知来源)
位于sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(未知源)
位于sun.net.www.protocol.http.HttpURLConnection.plainConnect0(未知源)
位于sun.net.www.protocol.http.HttpURLConnection.plainConnect(未知源)
位于sun.net.www.protocol.http.HttpURLConnection.connect(未知源)
位于sun.net.www.protocol.http.HttpURLConnection.getInputStream0(未知源)
位于sun.net.www.protocol.http.HttpURLConnection.getInputStream(未知源)
在yahoofinance.quotes.QuotesRequest.getResult(QuotesRequest.java:83)
在yahoofinance.yahoofinance.getQuotes(yahoofinance.java:332)
yahoofinance.yahoofinance.get(yahoofinance.java:76)
yahoofinance.yahoofinance.get(yahoofinance.java:61)
位于currency.CurrencyConverter.createWindow(CurrencyConverter.java:35)
在currency.CurrencyConverter.(CurrencyConverter.java:25)
CurrencyDriver$1.run(CurrencyDriver.java:10)
在java.awt.event.InvocationEvent.dispatch(未知源)处
位于java.awt.EventQueue.dispatchEventImpl(未知源)
位于java.awt.EventQueue.access$500(未知源)
在java.awt.EventQueue$3.run处(未知源)
在java.awt.EventQueue$3.run处(未知源)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.security.ProtectionDomain$1.doIntersectionPrivilege(未知源)
位于java.awt.EventQueue.dispatchEvent(未知源)
位于java.awt.EventDispatchThread.pumpOneEventForFilters(未知源)
位于java.awt.EventDispatchThread.pumpEventsForFilter(未知源)
位于java.awt.EventDispatchThread.pumpEventsForHierarchy(未知源)
位于java.awt.EventDispatchThread.pumpEvents(未知源)
位于java.awt.EventDispatchThread.pumpEvents(未知源)
位于java.awt.EventDispatchThread.run(未知源)

我想我也遇到了同样的问题:有时这需要一点努力,但我设法获得了我想要的信息,这有点无聊,我的意思是,递归地:

void searchQuote(symbol) throws InterruptedException {
    try{
        Stock stock = YahooFinance.get(symbol);
    }catch(Exception e){
        if(e.getClass().getName().equals("java.net.SocketException") ||
                 e.getClass().getName().equals("java.net.SocketTimeoutException")){
            Thread.sleep(60000);
            searchQuote(symbol);
        }
    }
}

对我来说,它起作用了。

你能发布完整的异常堆栈跟踪吗?它是在小程序中运行还是在WebStart中运行,还是在其他类型的沙箱中运行?它现在就在Eclipse中。我甚至不会称之为程序,整个过程就是那一行代码,我无法做任何其他事情,因为我无法让它工作。