Java:actionPerformed抛出异常并拒绝工作
我正在开发一个程序,它获取一个txt文件,这是一个电影列表,并从中随机选择一部电影。一切正常,但存在GUI问题。当我按下按钮时,无法将JLabel更改文本添加到所选电影 事实上,无论我在actionPerformed方法中添加了什么,它都会拒绝工作并抛出一系列异常 我不知道如何解决这个问题,因为一切都应该正常工作(至少对我来说) 您可以在主方法中看到,我调用System.out.println来从列表中打印电影,它就是这样工作的。我尝试在actionPerformed中使用相同的System.out.println命令,但没有成功 代码如下: MoviePick.javaJava:actionPerformed抛出异常并拒绝工作,java,swing,exception,actionevent,Java,Swing,Exception,Actionevent,我正在开发一个程序,它获取一个txt文件,这是一个电影列表,并从中随机选择一部电影。一切正常,但存在GUI问题。当我按下按钮时,无法将JLabel更改文本添加到所选电影 事实上,无论我在actionPerformed方法中添加了什么,它都会拒绝工作并抛出一系列异常 我不知道如何解决这个问题,因为一切都应该正常工作(至少对我来说) 您可以在主方法中看到,我调用System.out.println来从列表中打印电影,它就是这样工作的。我尝试在actionPerformed中使用相同的System.o
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;
}
}
导入java.io.File;
导入java.util.ArrayList;
导入java.util.Scanner;
公共类读取列表{
专用扫描器f;
private ArrayList theList=new ArrayList();
public void openFile(){
试一试{
f=新扫描仪(新文件(“list.txt”);
}捕获(例外e){
System.out.println(“未找到文件!”);
}
}
公共void readFile(){
while(f.hasNextLine()){
添加(f.nextLine());
}
}
公共文件(){
f、 close();
}
public void getList(){
用于(字符串移动:列表){
系统输出打印项次(mov);
}
}
公共字符串getRandom(){
int rand=(int)(Math.random()*theList.size());
String chosenOne=list.get(rand);
返回chosenOne;
}
}
您的问题在于:
public void actionPerformed(ActionEvent event){
ReadList random = new ReadList();
//This doesn't work
display.setText(random.getRandom());
}
您没有像在main中那样打开readlist、加载数据和关闭文件,它不起作用的原因是您在
main
方法中有这些方法,但在操作执行中没有
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)
抛出一个异常,因为列表中没有要获取的内容。啊,是的,这修复了它。我完全忘了那些。我只是在actionPerformed中移动了这三个函数,因为我现在在main中不需要它,还有ReadList的对象引用。谢谢