Java ruft Array von einer anderen Klasse auf - Java, Arrays, Klasse

Ich versuche ein zu speichern arrayList von Objekten in eine Textdatei, die aus dem Array erstellt wurde ipvalue[] welches in einer anderen Klasse instanziiert wird. Mein Problem ist, dass wenn ich versuche, das Array von der Mainframe Klasse zum Arraystorage Klasse, zeigt es das gesamte Array als null anAusgänge. Ich schätze das Problem ist, dass die Array-Daten innerhalb der Mainframe-Methode generiert werden, und wenn ich das Array von einer anderen Klasse aufrufen, nimmt es einfach das Array, wie es initialisiert wird. Meine Frage ist also, wie kann ich auf das Array zugreifen, nachdem es Wert zugewiesen wurde und dann, wenn es initialisiert ist.

new String[50]
mainframe class:



public class Mainframe extends javax.swing.JFrame {
static int ipcounter = 0;
public static String[] ipvalue = new String [50];


/**
* String a[]Creates new form Mainframe
*/
public Mainframe() {
try {
initComponents();
this.setLocation(500,250);
Nettest.main(null);
Display.setText(Nettest.indicator);
Arraystorage.main(null);
Path path = Paths.get("ipcounter.txt");

File file = new File("ipcounter.txt");


FileReader in = new FileReader("ipcounter.txt");
BufferedReader br = new BufferedReader(in);

readline = Integer.parseInt(br.readLine());
in.close();
ipcounter = readline;

if(ip.tracker.Nettest.status == true){
ipvalue[ipcounter] = Readipfromurl.inputLine;
//  crosscheck();

Writer writer = null;
writer = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream("ipcounter.txt"), "utf-8"));
writer.write(String.valueOf(ipcounter+1));

writer.close();
System.out.println(ipvalue[ipcounter]);
ipcounter++;


arraystorage class:


public class Arraystorage implements Serializable{
public static void main(String[] args) throws
ClassNotFoundException {

ArrayList<String> list = new ArrayList<String>();
for (int i=0; i<50;i++){
list.add(Mainframe.ipvalue[i]);}
try {
PrintWriter out = new PrintWriter(new BufferedWriter(new
FileWriter("data.txt")));
for( int x = 0; x < list.size(); x++)
{
out.println(list.get(x));
}

out.close();


} catch (IOException ex) {

Logger.getLogger(Arraystorage.class.getName()).log(Level.SEVERE,
null, ex);
}

Antworten:

1 für die Antwort № 1

Kurz gesagt, Sie rufen nicht an Mainframe() Das füllt Ihr Array mit Daten. Sie sollten es in der tun main Methode, bevor Sie verwenden müssen ipvalue Array. Rufen Sie einfach diese Methode auf Mainframe Beispiel:

public static void main(String[] args) throws  ClassNotFoundException {

ArrayList<String> list = new ArrayList<String>();
Mainframe frame = new Mainframe();
frame.Mainframe();
for (int i=0; i<50;i++){
list.add(Mainframe.ipvalue[i]);
}
... // do the rest

Bitte lesen Sie zumindest lange Oracle Java-Tutorial für Java-Grundlagen für Namenskonventionen, Code-Struktur und vieles mehr


1 für die Antwort № 2

Erstellen Sie einen statischen Blockinitialisierer:

public class Mainframe extends javax.swing.JFrame {

static int ipcounter = 0;
public static String[] ipvalue = new String [50];

static {
File file = new File("ipcounter.txt");
FileReader in = new FileReader("ipcounter.txt");
BufferedReader br = new BufferedReader(in);

// Fill your ipvalue

in.close();
}

// The rest of your class definition
public MainFrame() {

}

1 für die Antwort № 3

Ihr habt wahrscheinlich recht, aber ich habe eine andere Lösung gefunden In der Mainframe-Klasse rufe ich die Hauptmethode des Arraystorage auf Arraystorage.main (null);
nachdem ich dem Array Werte zugewiesen habe und es funktioniert!


Speisekarte