2014-02-26 86 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); 
    } 
}