【问题标题】:Java: JList getSelectedValue() NPEJava:JList getSelectedValue() NPE
【发布时间】:2013-03-27 20:21:06
【问题描述】:

我在尝试运行我的脚本时遇到了 NPE,但我不明白为什么,目标是运行在我的 JList 中选择的文件,所以这里是相关的代码位,从我的 JList 人口开始:

File f1 = new File("ARForm.java");
String assetClasses = f1.getAbsolutePath();
String[] splits = assetClasses.split(":");
String pathName = splits[0] + ":\\";
File dir = new File(pathName);
String[] lista = dir.list();
@SuppressWarnings("unchecked") 
JList list1 = new JList(lista);
JScrollPane js = new JScrollPane(list1);

这里是列出 NPE 的类的部分,标记线,这两组代码来自两个不同的类。

Object fileName;
ARForm mform;

public void actionPerformed(ActionEvent a){
    try{
        **fileName = mform.list1.getSelectedValue();**
        Process p = Runtime.getRuntime().exec(fileName.toString());
    }
}

如果这还不够,请告诉我,我会发布完整的课程。 如果有更简单的方法来做我所做的事情,请告诉我。

编辑

这是我的课程,我意识到有些导入是不必要的,我懒得复制/粘贴:

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

public class Autorun extends JFrame{
    public static void main(String[] args){
        ARForm mform = new ARForm();
        mform.setTitle("Security Roulette");
        mform.pack();
        mform.setLocationRelativeTo(null);
        mform.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        mform.setVisible(true);
    }
}

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

public class ARForm extends JFrame{
    JButton runButton;
    JLabel lab;
    File f1 = new File("ARForm.java");
    String assetClasses = f1.getAbsolutePath();
    String[] splits = assetClasses.split(":");
    String pathName = splits[0] + ":\\";
    File dir = new File(pathName);
    String[] lista = dir.list();
    @SuppressWarnings("unchecked") 
    JList list1 = new JList(lista);
    JScrollPane js = new JScrollPane(list1);


    public ARForm(){
        JPanel jp = new JPanel();
        jp.setLayout(new GridLayout(1,2));
        jp.add(js);
        jp.add(runButton = new JButton("Run"));
        runButton.setBounds(186, 10, 89, 23);
        runButton.addActionListener(new ButtonAction());
        add(jp);
    }
}

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

public class ButtonAction implements ActionListener{
    Object fileName;
    ARForm mform;

    public void actionPerformed(ActionEvent a){
        try{
            fileName = mform.list1.getSelectedValue();
            Process p = Runtime.getRuntime().exec(fileName.toString());
            System.exit(0);
        }
        catch (IOException e){
            e.printStackTrace();
            JOptionPane.showMessageDialog(null, "Yo Mama!");
        }
    }
}

【问题讨论】:

  • 出现空指针异常的原因是因为 1- mformnullmform.list1null 或者当 actionPerformed 是时列表中没有选择任何内容执行
  • 堆栈跟踪的顶行将有助于我们为您提供帮助。
  • ButtonAction.actionPerformed(ButtonAction.java:12) 处的线程“AWT-EventQueue-0”java.lang.NullPointerException 中的异常
  • 他们怎么可能是空的?我已经初始化了 mform,我知道 mform.list1 可以工作,因为列表/滚动窗格在运行时填充在 GUI 上,并且我知道我在单击按钮之前选择了一些东西。有没有办法按照程序的完整路径找出它的故障点?

标签: java swing jlist


【解决方案1】:

你还没有初始化ARForm mform。也许这就是问题所在?

【讨论】:

  • 它在不同的类中初始化,使用静态 main 方法,ARForm mform 仅用于从中提取 JList,抱歉,如果这不是一个真正的答案,我不喜欢这样的词汇初始化...
猜你喜欢
  • 2015-05-17
  • 2013-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多