0

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

:警告:可变参数方法的非可变参数调用,最后一个参数的参数类型不准确;ListView.getItems().addAll(ad); 为可变参数调用强制转换为 Object 为非可变参数调用强制转换为 Object[] 并抑制此警告

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

1 回答 1

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 的示例。
  3. 使用一致的缩进。
  4. 在发布之前删除无用和不相关的代码和评论(或者更好的是,发布sscce)。
  5. 发布 JavaFX 问题时,请使用 javafx 或 javafx-2 标签。
于 2013-10-17T08:27:00.093 回答