jfreechart falha ao usar o Yahoo Finance Quotes

PERGUNTA RESOLVIDA: a solução está mudando para o JFreeChart v1.0.15

Eu tenho um problema muito peculiar.

O que eu configurei é um arquivo que envia uma solicitação de URL para o site do Yahoo Finance e, em seguida, usa os resultados para desenhar um JFreeChart em um JFrame.

O que eu simplesmente não consigo entender é o seguinte:

Para determinadas solicitações de URL, o JFrame falha

Começa, mas mostra apenas uma tela branca. Considerando que, para outros pedidos, meu programa funciona bem.

Exemplo

Por exemplo:

Esse pedido:

"http://ichart.yahoo.com/table.csv?s=GOOG&a=0&b=1&c=2011&d=6&e=24&f=2013&g=d&ignore=.csv";

funciona bem.

Mas esse pedido:

"http://ichart.yahoo.com/table.csv?s=GOOG&a=2&b=1&c=2012&d=6&e=24&f=2013&g=d&ignore=.csv";

causa um erro.

Como isso é possível?

Nota

Eu sei o seguinte:

O JFrame trava, mas a JVM não faz anotações (não percebe que ele trava)O download das cotações de ações (as informações que o JFreeChart usa) é perfeito em ambos os casosO código para baixar os dados e exibi-los no JFreeChart vem deesse site (o código postado porRoyW »Sáb 10 de maio de 2008 7:52).A quantidade de dados que chega não parece ser um problema porque na solicitação 1, há mais pontos de dados que na solicitação 2A maneira que eu baixar os dados não importa (eu tentei ler tanto diretamente do URL e tentei salvar o.csv arquivo para uma pasta e, em seguida, lendo a partir da pasta)O problema não ocorre aleatoriamente: eu tentei lançar o JFrame (recompilar o código e depois executá-lo) várias vezes, mas a cotação 'errada' trava o JFrame toda vez.Informação extra

Algo que pode ter a ver com isso:

Quando eu inicio o gráfico com uma citação correta e arrasto o gráfico, algo estranho acontece. Em um determinado intervalo, parece que a cada final de semana, os castiçais ficam menores e menores até que eles são apenas uma faixa. Então, quando eu arrasto pelo fim de semana, eles se tornam mais grossos novamente até que voltem a ter tamanho normal. Isso parece acontecer a cada final de semana. Consulte as seguintes imagens:

Então isso me fez pensar que poderia ter algo a ver comdias de negociação. Mas isso não faz sentido porque01/01/2011 (pedido 1) cai em um sábado e01/03/2012 (pedido 2) cai numa quinta-feira enquanto o pedido 1 foi bem sucedido e o pedido 2 falhou.

Eu não tenho a menor idéia do que devo fazer.

Tudo ajuda muito apreciada.

Atualizar

A pedido, aqui está oSSCCE comtrashgodSugestões (usando JFreechart lib v1.0.14).

    import org.jfree.chart.*;
    import org.jfree.chart.axis.*;
    import org.jfree.chart.plot.XYPlot;
    import org.jfree.chart.renderer.xy.CandlestickRenderer;
    import org.jfree.data.xy.*;

    import javax.swing.*;
    import java.awt.*;
    import java.io.*;
    import java.net.URL;
    import java.text.*;
    import java.util.*;
    import java.util.List;

    public class CandlestickDemo2 extends JFrame {
        public CandlestickDemo2(String stockSymbol) {
            super("CandlestickDemo");
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

            DateAxis    domainAxis       = new DateAxis("Date");
            NumberAxis  rangeAxis        = new NumberAxis("Price");
            CandlestickRenderer renderer = new CandlestickRenderer();
            XYDataset   dataset          = getDataSet(stockSymbol);

            XYPlot mainPlot = new XYPlot(dataset, domainAxis, rangeAxis, renderer);

            //Do some setting up, see the API Doc
            renderer.setSeriesPaint(0, Color.BLACK);
            renderer.setDrawVolume(false);
            rangeAxis.setAutoRangeIncludesZero(false);
            domainAxis.setTimeline( SegmentedTimeline.newMondayThroughFridayTimeline() );

            //Now create the chart and chart panel
            JFreeChart chart = new JFreeChart(stockSymbol, null, mainPlot, false);
            ChartPanel chartPanel = new ChartPanel(chart, false);
            chartPanel.setPreferredSize(new Dimension(600, 300));

            this.add(chartPanel);
            this.pack();
        }
        protected AbstractXYDataset getDataSet(String stockSymbol) {
            //This is the dataset we are going to create
            DefaultOHLCDataset result = null;
            //This is the data needed for the dataset
            OHLCDataItem[] data;

            //This is where we go get the data, replace with your own data source
            data = getData(stockSymbol);

            //Create a dataset, an Open, High, Low, Close dataset
            result = new DefaultOHLCDataset(stockSymbol, data);

            return result;
        }
        //This method uses yahoo finance to get the OHLC data
        protected OHLCDataItem[] getData(String stockSymbol) {
            List<OHLCDataItem> dataItems = new ArrayList<OHLCDataItem>();
            try {
                String strUrl= "http://ichart.finance.yahoo.com/table.csv?s=GOOG&a=2&b=1&c=2012&d=6&e=24&f=2013&g=d&ignore=.csv";
                URL url = new URL(strUrl);
                BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
                DateFormat df = new SimpleDateFormat("y-M-d");

                String inputLine;
                in.readLine();
                while ((inputLine = in.readLine()) != null) {
                    StringTokenizer st = new StringTokenizer(inputLine, ",");

                    Date date       = df.parse( st.nextToken() );
                    double open     = Double.parseDouble( st.nextToken() );
                    double high     = Double.parseDouble( st.nextToken() );
                    double low      = Double.parseDouble( st.nextToken() );
                    double close    = Double.parseDouble( st.nextToken() );
                    double volume   = Double.parseDouble( st.nextToken() );
                    double adjClose = Double.parseDouble( st.nextToken() );

                    OHLCDataItem item = new OHLCDataItem(date, open, high, low, close, volume);
                    dataItems.add(item);
                }
                in.close();
            }
            catch (Exception e) {
                e.printStackTrace();
            }
            //Data from Yahoo is from newest to oldest. Reverse so it is oldest to newest
            Collections.reverse(dataItems);

            //Convert the list into an array
            OHLCDataItem[] data = dataItems.toArray(new OHLCDataItem[dataItems.size()]);

            return data;
        }

        public static void main(String[] args) {
            EventQueue.invokeLater(new Runnable() {
                @Override
                public void run() {
                    new CandlestickDemo2("GOOG").setVisible(true);
                }
            });
        }
    }

Isso gera um JFrame que exibe nada além de uma tela branca. Tente mudar ostrUrl&nbsp;para

 "http://ichart.finance.yahoo.com/table.csv?s=GOOG&a=0&b=1&c=2011&d=6&e=24&f=2013&g=d&ignore=.csv";

e você notará que isso funciona bem.

Atualizar

Resolvi-o!&nbsp;O problema era a versão do JFreeChart. Mudar de v1.0.14 para v1.0.15 resolveu tudo. Parabéns atrashgod&nbsp;para (sem saber) resolver o meu problema, respondendo extensivamentee mencionando a versão da biblioteca&nbsp;usava.

Alguém sabe como posso ajudar outras pessoas que estão tendo o mesmo problema? Existe um portal em algum lugar onde eu possa tomar nota deste bug?