2014-02-26 41 views
0

得到一个字符串变量中有2级2 main如何从另一个类

  • New_String用于从我的文件中读取文本文件。
  • 类别Write用于显示New_String类的读取值S1(=ar[1])

但是,无论我怎样努力,在Write类是只显示null,或者抛出一个NullPointerException错误。

因为程序在我的下一个阶段有进一步的功能,所以我不能只将2个类合并为一个。请告诉我如何调整。

write

public class write 
{ 
    //public static String getar=get.ar[1]; 
    //getar = get.ar[]; 
    public static void main(String args[]) throws IOException 
    { 
    New_string file = new New_string(); 
    //site.readline 
    System.out.println(file.S1); 
    //String S1 = ar[1]; 

    } 
} 

New_string

import java.io.IOException; 
import java.io.FileReader; 
import java.io.BufferedReader; 
public class New_string 
{ 
    public static String S1; 
    public static int a=0; 
    public static String ar[]; 
    public static int lnum=0; 
    public static String line=null; 
    public static void main(String args[]) throws IOException 
    { 
    FileReader fr= new FileReader("read_listflow.txt"); 
    BufferedReader br=new BufferedReader(fr); 

    while ((line=br.readLine())!=null) 
    { 
     lnum=lnum+1; 
    } 

    FileReader fr1= new FileReader("read_listflow.txt"); 
    BufferedReader br1=new BufferedReader(fr1); 
    ar=new String[lnum]; 

    while ((line=br1.readLine())!=null) 
    { 
     ar[a]=line; 
     a=a+1; 
    } 

    S1 = ar[1]; 
    } 
} 
+0

每个主()在其自己的JVM实例运行作为因此,基本上你有2个进程正在运行..不是同一进程的2个线程。因此,2个进程不能在没有IPC的情况下共享数据。 – TheLostMind

+0

那么,你正在使用写入类中的主函数来启动应用程序。所以New_string类中的主函数永远不会被调用,因此New_string.S1字段为null。在两个不同类中有两个主要方法的事实并不意味着当你启动程序时,每个程序都会被调用,而不是其中的一个。在写入内部的主要方法应该首先调用New_string.main(null),然后期望在New_string.S1 –

回答

0

主要方法,当你实例化一个类不会自动被调用。你需要明确调用类的方法来完成工作。

你必须做这样的事情..

public class NewString 
{ 
    public static String S1; 
    public static int a=0; 
    public static String ar[]; 
    public static int lnum=0; 
    public static String line=null; 

    public String read() throws IOException 
    { 
    FileReader fr= new FileReader("read_listflow.txt"); 
    BufferedReader br=new BufferedReader(fr); 
    while ((line=br.readLine())!=null) 
    { 
     lnum=lnum+1; 
    } 

    FileReader fr1= new FileReader("read_listflow.txt"); 
    BufferedReader br1=new BufferedReader(fr1); 
    ar=new String[lnum]; 
    while ((line=br1.readLine())!=null) 
    { 
     ar[a]=line; 
     a=a+1; 
    } 
    S1 = ar[1]; 
    return S1; 
    } 

} 

然后

public class Write 
{ 

    public static void main(String args[]) throws IOException 
    { 
    New_string file = new New_string(); 

    System.out.println(file.read()); 
    } 
} 

另外,请按照Java命名约定

+0

内有一个非空值的机会,我们甚至已经为该方法使用了完全相同的名称! :):p – Nullpointer

+0

Thx很多!它的工作!也许我应该回到基本〜>“<〜 – user3355550

0

简单的办法就是添加方法在您的New_string类中读取,并在您的写入类012中调用该方法我也做了改变

public class write 
    { 
     //public static String getar=get.ar[1]; 
     //getar = get.ar[]; 
    public static void main(String args[]) throws IOException 
     { 
     New_string file = new New_string(); 
      file.read() 
     //site.readline 
     System.out.println(file.S1); 
     //String S1 = ar[1]; 

     } 
    } 

import java.io.IOException; 
import java.io.FileReader; 
import java.io.BufferedReader; 
public class New_string 
{ 
    public static String S1; 
    public static int a=0; 
    public static String ar[]; 
    public static int lnum=0; 
    public static String line=null; 
public read(String args[]) throws IOException 
    { 
    FileReader fr= new FileReader("read_listflow.txt"); 
    BufferedReader br=new BufferedReader(fr); 
    while ((line=br.readLine())!=null) 
    { 
    lnum=lnum+1; 
    } 

    FileReader fr1= new FileReader("read_listflow.txt"); 
    BufferedReader br1=new BufferedReader(fr1); 
    ar=new String[lnum]; 
    while ((line=br1.readLine())!=null) 
    { 
    ar[a]=line; 
    a=a+1; 
    } 
    S1 = ar[1]; 
    } 
} 
0

坏的代码,但以下少了点你肮脏的工作:)

public class write 
{ 

    public static void main(String args[]) throws IOException { 
     New_string.main(mull); 
     System.out.println(New_string.S1); 
    } 
}