Java &引用;未经检查或不安全的操作”;编译时出错

Java &引用;未经检查或不安全的操作”;编译时出错,java,compiler-warnings,Java,Compiler Warnings,我是Java编程的新手,我正在尝试将文件列表添加到一个粗糙的小型媒体播放器中。似乎我已经成功地实现了我想要的: public class MusicPlayerGUI implements ActionListener { private static JFileChooser fileChooser = new JFileChooser(System.getProperty("user.dir")); private JList tracklist; priv

我是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;
}
公共类MusicLayerGUI
实现ActionListener
{
私有静态JFileChooser fileChooser=newjfilechooser(System.getProperty(“user.dir”);
私人JList跟踪列表;
私人音乐播放器;
私人文件组织者;
私有列表轨道;
私有JFrame;
公共音乐Layergui()
{
player=新音乐播放器();
organizer=新文件管理器();
tracks=organizer.listAllFiles();
makeFrame();
}
//省略了一些方法
公共游戏
{
int fileToPlay=tracklist.getSelectedIndex();
字符串filenameToPlay=organizer.getFile(fileToPlay);
player.play(filenameToPlay);
}
公共无效设置列表()
{
tracks=organizer.listAllFiles();
String[]fileList=listaltracks(tracks);
tracklist.setListData(文件列表);
}
公共字符串[]ListalTracks(列表曲目)
{
int numtrack=tracks.size();
String[]fileList=新字符串[numTracks];
对于(int i=0;i
但当我编译时,即使它确实编译了,它也会给我一个错误,说明:

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


我的播放器中的所有东西都正常工作,除了它不会播放文件,所以我想在我收到的编译器警告和文件不会播放这一事实之间可能存在某种联系。有人能发现我出了什么问题吗?

当你将某个东西的原始版本分配给具有泛型类型参数的版本时,会发生这种情况,如s:

List<String> list = new ArrayList(); // Note missing <String>
List List=new ArrayList();//缺少注释

所以我猜
文件管理器的
listAllFiles
方法(不管是什么)返回
列表
,而不是
列表
。编辑:或者使用
JList
可能会有,这是因为您定义的
JList
没有泛型。

参数化类型在
私有JList跟踪列表中丢失;

尝试在泛型类中使用参数化类型。
private JList tracklist;

您从哪里得到该警告?它会在一个单独的窗口中弹出。如果有什么需要说明的话,我正在使用BlueJ…错误只是关于泛型的使用。所有这一切都可能导致运行时出现
ClassCastException
。此编译警告将在我们无法解决不播放任何曲目的问题。看看代码,我猜organizer.getTracklist()不是类型安全的()并导致警告。正如Marko所说,不要担心警告。很难说为什么你的文件在没有看到你的播放器的情况下不能播放,但在过去,我尝试过这种事情,因为我没有在播放器线程中放入某种“线程。睡眠”,所以它几乎一开始就终止。只是一个旁注,除非您使用的是非常旧版本的Java,您可以用“for(String-field:tracks){fileList[i]=field;}”替换for循环。哦,是的,可能是这样,因为它使用
列表调用
tracklist.setListData