2013-03-27 3 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()); 
    } 
} 

Если этого недостаточно, сообщите мне, и я должен заполнить все классы. И если есть более простые способы сделать то, что я сделал, дайте мне знать, пожалуйста.

EDIT

Вот мои занятия, я понимаю, некоторые из импорта не нужны, я ленив с копирования/вставки:

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

+0

. верхние строки трассировки стека будут полезны для нас, чтобы помочь вам. – MondKin

+0

Исключение из потока «AWT-EventQueue-0» java.lang.NullPointerException \t at ButtonAction.actionPerformed (ButtonAction.java:12) – Lemiwinks

ответ

0

У вас нет itialized ARForm mform. Возможно, это проблема?

+0

Он инициализируется в другом классе со статическим основным методом, форма ARForm только для того, чтобы вытащить JList, извините, если это действительно не ответ, я плохо разбираюсь в vocab, как инициализация ... – Lemiwinks