Java中出现“Cannot find symbol”错误?

3
我收到了这个错误信息:
   symbol  : constructor JTable(float[][],java.lang.String[])
    location: class javax.swing.JTable
    table = new JTable(dataValues, columnNames );

以下是代码。
import java.awt.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.util.ArrayList;
import javax.swing.table.*;

public class benchtesting extends JFrame
{

    private     JTabbedPane tabbedPane;
    private     JPanel      panel1;
    private     JPanel      panel2;
    private     JPanel      panel3;
private JTable table;
    private JScrollPane scrollPane;


    public static void main( String args[] )
    {
        benchtesting mainFrame  = new benchtesting();
        mainFrame.setVisible( true );
    }

public benchtesting()
    {

        setSize(280,200);
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        setLocation(1300,280);
        setTitle("Photoreceptor Analysis");

        JPanel topPanel = new JPanel();
        topPanel.setLayout( new BorderLayout() );
        getContentPane().add( topPanel );

        // Create the tab pages
        createPage1();
    //  createPage2();
    //  createPage3();

        // Create a tabbed pane
        tabbedPane = new JTabbedPane();
        tabbedPane.addTab( "Table", panel1 );
        tabbedPane.addTab( "Intensity Map", panel2 );
        tabbedPane.addTab( "Notes", panel3 );
        topPanel.add( tabbedPane, BorderLayout.CENTER );
}


    public void createPage1()
    {

panel1 = new JPanel();
        panel1.setLayout( new BorderLayout() );

    float dataValues_all[]= new float[400]; 

BufferedReader inputFile2=null;
BufferedReader inputFile=null;

            try {
    FileReader freader =new FileReader("results.txt");
        inputFile2 = new BufferedReader(freader); 


    String read = "";
    String number ="";

    for (int linenum=0; linenum<400; linenum++) {

    read = inputFile2.readLine();


  if(read != null && read.startsWith("D"))
     {

                number = read.substring(9,15);  
                float real_numbers = Float.parseFloat(number);  

            real_numbers= real_numbers*2817217;
            System.out.println(Math.round(real_numbers)+" cells/mm^2"); 
        dataValues_all[linenum] = real_numbers; 
     } 
         }

         // System.out.println("hmm "+dataValues_all[398]); 

        String columnNames[] = {"1","2","3","4","5","6","7","8","9","10"};
    float dataValues[][]= new float [1][10]; //1 row, 10 coloumns 


dataValues[0][0] = dataValues_all[2];
dataValues[0][1] = dataValues_all[6];
dataValues[0][2] = dataValues_all[10];
dataValues[0][3] = dataValues_all[14];
dataValues[0][4] = dataValues_all[18];
dataValues[0][5] = dataValues_all[22];
dataValues[0][6] = dataValues_all[26];
dataValues[0][7] = dataValues_all[30];
dataValues[0][8] = dataValues_all[34];
dataValues[0][9] = dataValues_all[38];


table = new JTable(dataValues, columnNames );

        scrollPane = new JScrollPane(table);
panel1.add( scrollPane, BorderLayout.CENTER );



      } catch( Exception y ) {  y.printStackTrace();    } 

}}

你在编译时遇到了这个错误吗?还是在运行时出现的?你的类路径是什么样子的?细节,我们需要它们。 - Jordan S. Jones
FYI:在“table = new JTable(dataValues, columnNames);”的第108行编译失败。 - slartidan
7个回答

2

你不能使用一个多维原始类型数组。你需要使用一个多维对象数组。

这是无效的:

float[][] arr;

这是有效的:

Float[][] arr;

这完全不是真的。你可以很好地使用float[][]数组或int[][]。你把它和List或Collection混淆了。 - Amir Raminfar
2
@Amir Raminfar:当然可以使用 float[][] 数组。只是不能用它来构建 JTable。请阅读问题的上下文和一些角度的答案! - Pablo Santa Cruz

2
JTable的构造函数需要参数(Object[][] rowData, Object[] columnNames)。因此,在调用该构造函数时,您需要使用这些类型的值进行调用。
String[]作为Object[]传递没有问题(因为String是一个Object),但将float[][]作为Object[][]传递是无效的(因为float 不是一个Object)。
使用Java5,将基本类型(如float)装箱到包装对象(如Float)中变得可能。这意味着Float a = 0.1f;是有效的。但是,数组不支持装箱。
您的问题可能最好的解决方案是将变量dataValues更改为Float[][]类型。

0

0

没有匹配的构造函数适用于 JTable,它期望第一个参数扩展 Object[][]float 是原始类型,不扩展 ObjectFloat 是一个对象,可以使用它代替。


感谢大家提供的有关原始/对象信息。 我将float更改为Float,现在它可以正常工作了。 - razshan

0

float是一种原始类型,而不是对象。


0

请查看Javadocs。您可能需要创建一个Float[][](对象)


0

JTable类实际上没有接受二维浮点数组和常规字符串数组的构造函数。它有一个构造函数

JTable(Object[], String[])

所以,只需更改

float dataValues[][]= new float [1][10];

Object dataValues[][]= new Object [1][10];

然后就可以愉快地使用了。感谢自动装箱...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接