ArrayList

6 respostas
E

Galera.
Estou tentando carregar um vertor com uma linha de uma ArrayList. O código é o seguinte:

public geraGrafico2Barras (String title, String[] legendaGraficos, int periodo, int barra1, int barra2,  ArrayList dados) {

    
    super(title);
    try{
        DefaultCategoryDataset dataset = new DefaultCategoryDataset(); 

        String series1 = legendaGraficos[0];
        String series2 = legendaGraficos[1];

        for(int h=1;h<=dados.size();h++){
            
            String[] capturaArray = ( String[])dados.toArray( new String [dados.size()] );

            dataset.addValue(Float.valueOf(capturaArray[barra1]),series1, capturaArray[periodo]);
            dataset.addValue(Float.valueOf(capturaArray[barra2]),series2, capturaArray[periodo]);
            capturaArray = null; 
         }
            JFreeChart chart = createChart(dataset, title);
            ChartPanel chartPanel = new ChartPanel(chart, false);
            chartPanel.setPreferredSize(new Dimension(500, 270));
            setContentPane(chartPanel);
    }catch( Exception e ){
            JOptionPane.showMessageDialog(null, "Atenção! Erro na contrução do gráfico! \n" +
            "Favor informar a mensagem abaixo ao adminstrador do sistema! \n " +
            e.getMessage(), "Erro de construção de gráfico", JOptionPane.WARNING_MESSAGE);
                                 
    }
   
}

Ocasiona o seguinte erro de runtime:

Exception in thread AWT-EventQueue-0 java.lang.ArrayStoreException

at java.lang.System.arraycopy(Native Method)

at java.util.ArrayList.toArray(ArrayList.java:305)

at cpa.geraGrafico2Barras.(geraGrafico2Barras.java:71)

A linha 71 é:
String[] capturaArray = ( String[])dados.toArray( new String [dados.size()] );

Não consigo enxergar entender esta excessão. Todos os campos da ArrayList são strings.

Alguém pode me ajudar?

Obrigado:

Edilson Cavalieri

6 Respostas

bland

Edilson,

Você já tentou isso:

String[] capturaArray = (String[])dados.toArray();

Pelo que eu andei lendo da API do ArrayList o método toArray vai retornar um Object[]. Portanto, se você fizer o cast para String[] eu acho que vai funcionar.

Testa aê, se não funcionar, posta aqui o erro. Espero ter te ajudado.

Rodrigo_Manhaes

Creio que a solução do bland está correta. Mas se preferir não fazer um cast, pode fazer o seguinte:

String[] capturaArray = dados.toArray(new String[] {});
E

Quando utilizo:
String[] capturaArray = (String[])dados.toArray();
me retorna a excessão:

Exception in thread “AWT-EventQueue-0” java.lang.ClassCastException: [Ljava.lang.Object;
at cpa.geraGrafico2Barras.(geraGrafico2Barras.java:72)

Quando utilizo:
String[] capturaArray = dados.toArray(new String[] {});

retorna um object [] e capturaArray é String[];

Obrigado,

Edilson Cavalieri

T

Como você está adicionando dados à variável dados?

a) Sempre estou adicionando  string

dados.add (Juca);

dados.add (Integer.toString (10));

dados.add (new DecimalFormat("#.##").format (123.45));
b) Estou adicionando e nem estou prestando atenção no que estou fazendo

dados.add(1); // isto é equivalente a “new Integer(1)”, pelo menos para o Java 5.0

dados.add(Juca);

dados.add(new Object()); // sei lá por que alguém iria querer fazer isto…

dados.add(1.2); // equivale a new Double(1.2);
Rodrigo_Manhaes

Edilson, para o código que eu postei funcionar, você tem que utilizar genéricos, utilizando um parâmetro como ArrayList em lugar de ArrayList.

E se me permite um conselho, procure não utilizar como parâmetros ou tipos de retorno de métodos classes concretas de coleções como ArrayList, HashMap ou HashSet. Na medida do possível (e nunca precisei não fazer assim) utilize em lugar delas interfaces como List, Set, SortedSet ou Map. Isto dá mais flexibilidade a seu código, não atrelando-o a uma classe específica.

E

Estou alimentando ArrayList com um Resulset porém, carrego tudo em String. Exemplo de uma linha do ArrayList:
“Jan-06”,“99.55”, “99.66”,“0.11”,“432343”,“234323”

São todos Strings. Ainda não usei interfaces. Valeu pela dica Rodrigo. Ainda estou em fase de aprendizagem da linguagem, vou procurar seguir a sua dica.

Obrigado. Edilson,

Criado 30 de junho de 2006
Ultima resposta 1 de jul. de 2006
Respostas 6
Participantes 4