繁体   English   中英

Java从另一个类调用数组

[英]Java calling array from another class

我试图将对象的arrayList存储到从数组ipvalue[]创建的文本文件中,该文件在另一个类中实例化。 我的问题是每当我尝试将数组从Mainframe类加载到Arraystorage类时,它会将整个数组显示为null输出。 我想问题是数组数据是在Mainframe方法中生成的,当我从另一个类调用数组时,它只是在初始化时获取数组。 所以我的问题是如何在分配值而不是初始化数组后如何访问数组。

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);
   }

简而言之,您不会调用Mainframe()来为数组填充数据。 在需要使用ipvalue数组之前,您应该在main方法中执行此操作。 所以,只需在Mainframe实例上调用此方法:

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

很长一段时间,请阅读至少Oracle Java教程,了解Java基础知识的命名约定,代码结构等等

创建一个静态块初始化器:

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() {

    }

你们大概是对的,但我在大型机类中找到了另一种解决方案,我称之为arraystorage的主方法Arraystorage.main(null);
在为数组赋值后,它可以工作!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM