2013-03-27 51 views
0

我试图运行脚本时遇到了NPE,我不明白为什么,目标是运行在我的JList中选择的文件,因此这里是代码的相关位,开始我将JList的人群:Java:JList getSelectedValue()NPE

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!"); 
     } 
    } 
} 
+0

你得到一个空指针异常的原因是因为1-'mform'为'null'或'mform.list1'为'null'或者在执行'actionPerformed'时在列表中没有被选中。 – MadProgrammer 2013-03-27 21:03:18

+0

堆栈轨迹的顶部线条对我们来说很有帮助。 – MondKin 2013-03-27 21:57:48

+0

线程“AWT-EventQueue-0”中的异常java.lang.NullPointerException \t at ButtonAction.actionPerformed(ButtonAction.java:12) – Lemiwinks 2013-03-27 23:53:52

回答

0

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

+0

它在不同的类中初始化,使用静态主要方法,ARForm mform只是从那里拉出JList,对不起,如果这不是真的答案,我不喜欢像初始化的词汇... – Lemiwinks 2013-03-27 20:38:25