Я получаю 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!");
}
}
}
Причина, по которой вы получаете исключение нулевого указателя, состоит в том, что 1- 'mform' является' null' или 'mform.list1' является' null' или ничего не выбрано в списке при выполнении 'actionPerformed' – MadProgrammer
. верхние строки трассировки стека будут полезны для нас, чтобы помочь вам. – MondKin
Исключение из потока «AWT-EventQueue-0» java.lang.NullPointerException \t at ButtonAction.actionPerformed (ButtonAction.java:12) – Lemiwinks