Java:actionPerformed抛出异常并拒绝工作

时间:2014-11-03 17:59:56

标签: java swing exception actionevent

我正在开发一个程序,它接受一个txt文件,这是一个电影列表,并从中选择一个随机电影。一切正常,但存在GUI问题。当我按下按钮时,我无法为选定的电影制作JLabel更改文本。

事实上,无论我在actionPerformed方法中放置什么都拒绝工作并抛出一堆异常。

我不知道如何解决这个问题,因为一切都应该正常工作(至少对我而言)。

你可以看到在main方法中我调用System.out.println从列表中打印出那部电影,它就是这样的。我尝试在actionPerformed中添加相同的System.out.println命令,但它不起作用。

这是代码: MoviePick.java

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class MoviePick implements ActionListener{
    private JButton button;
    private JLabel display;

    public static void main(String[] args) {
        ReadList list = new ReadList();
        MoviePick gui = new MoviePick();

        list.openFile();
        list.readFile();
        list.closeFile();

        gui.setup();

        //This works
        System.out.println(list.getRandom());
    }

    public void setup(){
        JFrame frame = new JFrame("Random Movie Picker");
        frame.setSize(250,100);
        frame.setResizable(false);
        frame.setLocationRelativeTo(null);

        button = new JButton("Get Random Movie");
        display = new JLabel("Movie");

        button.addActionListener(this);
        button.setPreferredSize(new Dimension(240,25));

        frame.setLayout(new FlowLayout(FlowLayout.CENTER));

        frame.add(display);
        frame.add(button);

        frame.setVisible(true);
    }

    @Override
    public void actionPerformed(ActionEvent event){
        ReadList random = new ReadList();

        //This doesn't work
        display.setText(random.getRandom());
    }
}

ReadList.java

import java.io.File;
import java.util.ArrayList;
import java.util.Scanner;

public class ReadList {
    private Scanner f;
    private ArrayList<String> theList = new ArrayList<String>();

    public void openFile(){     
        try{
            f = new Scanner(new File("list.txt"));
        }catch(Exception e){
            System.out.println("File not found!");
        }
    }

    public void readFile(){
        while(f.hasNextLine()){
            theList.add(f.nextLine());
        }
    }

    public void closeFile(){
        f.close();
    }

    public void getList(){
        for(String mov : theList){
            System.out.println(mov);
        }
    }

    public String getRandom() {
        int rand = (int) (Math.random()*theList.size());
        String chosenOne = theList.get(rand);
        return chosenOne;
    }

}

2 个答案:

答案 0 :(得分:1)

它不起作用的原因是因为您在main方法中使用了这些方法,而在actionPerformed

中没有这些方法
list.openFile();
list.readFile();
list.closeFile();

没有这些,这些行失败

int rand = (int) (Math.random()*theList.size());
String chosenOne = theList.get(rand);
return chosenOne;

因为theList.size()0,所以theList.get(0)会引发异常,因为列表中没有任何内容可以获取。

答案 1 :(得分:0)

你的问题在这里:

public void actionPerformed(ActionEvent event){
    ReadList random = new ReadList();

    //This doesn't work
    display.setText(random.getRandom());
}

您没有像在主

中那样打开读取列表,加载数据和关闭文件