编译时出现“未检查或不安全的操作”错误

时间:2014-01-14 16:37:39

标签: java compiler-warnings

我是Java编程的新手,我正在尝试向粗略的小媒体播放器添加文件列表。看起来我已经成功实现了我想要的东西:

public class MusicPlayerGUI
    implements ActionListener
{
    private static JFileChooser fileChooser = new JFileChooser(System.getProperty("user.dir"));

    private JList tracklist;
    private MusicPlayer player;
    private FileOrganizer organizer;
    private List<String> tracks;
    private JFrame frame;

public MusicPlayerGUI()
{
    player = new MusicPlayer();
    organizer = new FileOrganizer();
    tracks = organizer.listAllFiles();
    makeFrame();
}

//Some methods omitted

public void play()
{
    int fileToPlay = tracklist.getSelectedIndex();
    String filenameToPlay = organizer.getFile(fileToPlay);
    player.play(filenameToPlay);
}

public void setupList()
{
    tracks = organizer.listAllFiles();
    String[] fileList = listAllTracks(tracks);
    tracklist.setListData(fileList);
}

public String[] listAllTracks(List<String> tracks)
{
    int numTracks = tracks.size();
    String[] fileList = new String[numTracks];
    for(int i = 0; i < numTracks; i++) {
        String field = tracks.get(i).toString();

        fileList[i] = field;
    }

    return fileList;
}

但是当我编译时,即使它编译,它也会给我一个错误说明:

  

[pathname] /classname.java使用未经检查或不安全的操作。   使用Xlint重新编译:未选中以获取详细信息

我的播放器中的所有内容都有效,但它不会播放文件,因此我认为编译器警告之间可能存在连接,以及文件无法播放的事实。谁能发现我的错误?

3 个答案:

答案 0 :(得分:3)

当您将某个原始版本分配给具有泛型类型参数的版本时会发生这种情况,如下所示:

List<String> list = new ArrayList(); // Note missing <String>

所以我的猜测是listAllFiles的{​​{1}}方法(无论是什么)返回FileOrganizer,而不是List修改:或user1631616使用List<String>可能spotted it

答案 1 :(得分:2)

这是因为您定义了JList没有泛型。

答案 2 :(得分:2)

private JList tracklist;中缺少参数化类型 尝试在泛型类中使用参数化类型。 private JList<Object> tracklist;