JavaFx转换为Object以进行varargs调用

时间:2013-10-14 15:59:11

标签: java variadic-functions

以下代码我遇到这样的错误如何解决这个问题。

:警告:非varargs调用varargs方法,最后一个参数的参数类型不精确;                 ListView.getItems()中的addAll(广告)。   转换为Object以进行varargs调用   转换为Object []以进行非varargs调用并禁止此警告

String []ad = new String[100];
String []bd = new String[100];
String []cd = new String[100];



        int i=0;
try {
        Class.forName(m_Driver2);
    }
    catch (ClassNotFoundException ex) {
        ex.printStackTrace();
    }


    String query2 = "";

    try {
        //Create connection object
        m_Connection2 = DriverManager.getConnection(m_Url2, "root", "");

        //Create Statement object
        m_Statement2 = m_Connection2.createStatement();
        query2 = "SELECT * FROM diziler";

        //Execute the query
        m_ResultSet2 = m_Statement2.executeQuery(query2);
        System.out.println("TTTTTTTTTTT");
        while (m_ResultSet2.next()) {

            //System.out.print(m_ResultSet.getString(1));
            //cBox.getItems().addAll(m_ResultSet.getString(1));
             ad[i]=m_ResultSet2.getString(1);
             bd[i]=m_ResultSet2.getString(2);

             //files=m_ResultSet.getString(3);
             //File f4 = new File(files);


            i++;
            System.out.print(", ");
            System.out.print(m_ResultSet2.getString(1));
            System.out.print(", ");
            System.out.print(m_ResultSet2.getString(2));
            System.out.print("\n"); //new line

        }
            ListView.getItems().addAll(ad);


    }
    catch (SQLException ex) {
        ex.printStackTrace();
        System.out.println(query2);
    }
    finally {

        try {
            if (m_ResultSet2 != null)
                m_ResultSet2.close();
            if (m_Statement2 != null)
                m_Statement2.close();
            if (m_Connection2 != null)
                m_Connection2.close();
        }
        catch (SQLException ex) {
            ex.printStackTrace();
        }
    }

1 个答案:

答案 0 :(得分:0)

解决方案

定义ListView时指定ListView类型。

ListView<String> listview = new ListView<>();

说明

如果你没有告诉ListView它是用于字符串列表,那么当你尝试通过addAll方法将数组添加到listView时,Java编译器警告它不能工作如果您尝试将数组中的各个项目作为列表中的不同项目添加到支持列表中,或者将数组本身添加为列表中的单个项目。但是当你告诉ListView它是一个字符串列表时,编译器足够聪明,知道你不可能想要将列表数组添加为列表中的单个项目,而是想要添加每个个体数组中的项目到列表中。此外,当您指定ListView的类型时,可以使用更强类型检查,并且不再可能错误地向列表中添加不正确类型的内容。

示例代码

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.ListView;
import javafx.stage.Stage;

public class ListLoader extends Application {
    public static void main(String[] args) {
        launch(args);
   }

    @Override
    public void start(Stage stage) throws Exception {
        String[] data = { "apple", "orange", "pear" };

        ListView<String> listview = new ListView<>();
        listview.getItems().addAll(data);

        stage.setScene(new Scene(listview));
        stage.show();
   }
}

无关建议

对您的代码提出了几条附带意见:

  1. 使用Java命名约定(不要调用变量ListView,而是将其命名为listView)。
  2. 在另一个线程中执行长时间运行的任务(如数据库查询),并使用JavaFX并发实用程序确保未在该线程上更新ListView项。请参阅使用任务从数据库填充ListView的example
  3. 使用一致的缩进。
  4. 在发布之前删除无用且不相关的代码和评论(或者更好的是,发布sscce)。
  5. 发布JavaFX问题时,请使用javafx或javafx-2标记。