簡體   English   中英

Java:Yahoo Finance API:SocketException:權限被拒絕

[英]Java: Yahoo Finance API: SocketException: Permission denied

因此,我試圖編寫我的第一個程序來從Web提取數據,並且由於它是財務程序,所以我決定使用(據說)簡單易用的Yahoo! 財務API。 我下載了API .jar文件,並且為了保存起見,我通過添加外部Jars工具將它們中的大部分導入了Eclipse。

問題是,每當我嘗試運行它時,都會收到SocketException:權限被拒絕運行時錯誤。

我正在運行的代碼非常基礎:

Stock stock = YahooFinance.get("ORCL");

這段代碼應該可以從Yahoo Finance獲得Oracle(ORCL)股票的價值。 相反,它將引發異常。

我已經嘗試了所有我能想到的:

1)我禁用了防火牆2)我對.jar導入進行了雙重檢查3)我測試了將此行作為單獨線程的一部分運行(進行了一次絕望的盲目移動,但那時我已經到達了)。

我已經竭盡所能研究所有可能的角度,到目前為止,我發現的只是: 使用JSP發送電子郵件

這看起來非常相似,因此我嘗試了建議的解決方案:在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)

我想我遇到了同樣的問題:有時候這會花點時間,但是我設法遞歸地得到了我想要的一些無聊的信息:

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

對我來說,它奏效了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM