ورود

View Full Version : سوال: مشکل با java.lang.NullPointerException



mehrdad85
سه شنبه 14 آبان 1392, 23:37 عصر
سلام
دوستان من یه برنامه نوشتم که داخل متد main اون یه نمونه از یک کلاس درست کردم و یکی از متده ای اون کلاس را اجرا می کنم . این متد نیاز به یک آرگومان ورودی از نوع []String داره .
داخل برنامه main هم من یه متغییر از نوع []String دارم و به اون پاس میدم اما با پیغام خطای java.lang.NullPointerException مواجه میشم . حدس زدم که شاید اون متغییری که به عنوان پارامتر پاس میدم مقدار null داشته باشه به همین منظور یه حلقه for نوشتم و داخل اون دونه دونه ایتم های متغییر []String را خوندم و داخل کنسول چاپ کردم . همه چیز درست بود اون مقدار null نداشت اما نمیدونم چرا برنامم کار نمیکنه . کسی از دوستان چیزی به ذهنش میرسه؟ ممنون میشم راهنمایی بفرمایید . سپاس


public class WriteFile {

public void WriteOut(String[] arr) throws IOException

این همون کلاسی هستش که ازش یه آبجکت میسازم و متدش را فراخوانی میکنم .
این هم بخشی از کد main هستش :

String[] arr=new String[20];
arr=rf.input;
for(int i=1;i<10;i++)
{
System.out.print(arr[i]);
}
WriteFile wf=new WriteFile();
wf.WriteOut(arr);

جالبه حلقه for به درستی اجرا میشه اما 2 خط کد بعد پیغام خطا میده .

Ehsan rashydy
چهارشنبه 15 آبان 1392, 08:11 صبح
اگه اون حلقه ی forای که میگی درست کار کنه و همه ی آبجکتهای ارایه رو تو کنسول چاپ کنه،
مشکل از تابع WriteOut هست،
کدشو کامل بزار ببنییم

mehrdad85
چهارشنبه 15 آبان 1392, 15:09 عصر
سلام
ممنون دوست عزیز بخاطر توجهت
این هم کد تابع WriteOut
منتظر کمک و راهنمایی همه دوستان هستم




سپاس





public void WriteOut(String[] arr) throws IOException
{
File f=new File("D:\\write.txt");
FileWriter fw=new FileWriter(f);
BufferedWriter bw=new BufferedWriter(fw);

for(int i=0;i<20;i++)
{
bw.write(arr[i]);
}
fw.close();
bw.close();
}

Ehsan rashydy
پنج شنبه 16 آبان 1392, 00:32 صبح
سلام
ممنون دوست عزیز بخاطر توجهت
این هم کد تابع WriteOut
منتظر کمک و راهنمایی همه دوستان هستم




سپاس





public void WriteOut(String[] arr) throws IOException
{
File f=new File("D:\\write.txt");
FileWriter fw=new FileWriter(f);
BufferedWriter bw=new BufferedWriter(fw);

for(int i=0;i<20;i++)
{
bw.write(arr[i]);
}
fw.close();
bw.close();
}


آقا یه حرکتی بزن، این stack trace هم بزار ببینیم!

a.seieddokht
پنج شنبه 16 آبان 1392, 11:29 صبح
آقا یه حرکتی بزن، این stack trace هم بزار ببینیم!

سلام نمی دونم منظوزتون چیه ؟ ولی اگه بخواهید تو فایل بنویسید میتونید از کدی که نوشتم استفاده کنید
موفق باشید دوست عزیز:لبخندساده:


import java.io.*;
import java.net.URL;

public class WriteFile {
private File file;
private FileWriter fileWriter;


public WriteFile(String path) throws IOException {
file = new File(path);
if (!file.exists())
file.createNewFile();

fileWriter = new FileWriter(file);
}

public void write(String s) throws IOException {
fileWriter.write(s);
}

public void close() throws IOException {
fileWriter.close();
}


public static void main(String[] args) throws IOException {
WriteFile writeFile = new WriteFile("D:\\a.txt");
writeFile.write("salam\r\n");
writeFile.write("khobi?\r\n");
writeFile.close();
}
}

mehrdad85
پنج شنبه 16 آبان 1392, 11:33 صبح
سلام دوست عزیز این هم از stack trace


debug:
Exception in thread "main" java.lang.NullPointerException
at java.io.Writer.write(Writer.java:157)
at shaghayegh.WriteFile.WriteOut(WriteFile.java:25)
at shaghayegh.Shaghayegh.main(Shaghayegh.java:32)
Java Result: 1
BUILD SUCCESSFUL (total time: 3 seconds)

a.seieddokht
پنج شنبه 16 آبان 1392, 11:53 صبح
سلام دوست عزیز این هم از stack trace


debug:
Exception in thread "main" java.lang.NullPointerException
at java.io.Writer.write(Writer.java:157)
at shaghayegh.WriteFile.WriteOut(WriteFile.java:25)
at shaghayegh.Shaghayegh.main(Shaghayegh.java:32)
Java Result: 1
BUILD SUCCESSFUL (total time: 3 seconds)

اقا میشه دقیقا بفرمایید می خواهید چیکار کنید ؟؟؟ اگه میخواهید که String str[] b رو تو فایل ذخیره کنید String str[] یک reference هست میتونید از ObjectOutputStream استفاده کنید و متد writeObject استفاده کنید:لبخندساده:

Ehsan rashydy
پنج شنبه 16 آبان 1392, 19:08 عصر
سلام دوست عزیز این هم از stack trace


debug:
Exception in thread "main" java.lang.NullPointerException
at java.io.Writer.write(Writer.java:157)
at shaghayegh.WriteFile.WriteOut(WriteFile.java:25)
at shaghayegh.Shaghayegh.main(Shaghayegh.java:32)
Java Result: 1
BUILD SUCCESSFUL (total time: 3 seconds)


من هنوز نتونستم بفهمم که شما چرا null pointer exception میگیری،
میگم میخوای کل پروژه رو بزار یه بار خودم ببینم....

mehrdad85
پنج شنبه 16 آبان 1392, 19:33 عصر
من هنوز نتونستم بفهمم که شما چرا null pointer exception میگیری،
میگم میخوای کل پروژه رو بزار یه بار خودم ببینم....
سلام
دوست عزیز من میخوام یک فایل خونده بشه و داخل []string ریخته بشه و بعد هم این []String داخل یک فایل نوشته بشه همین

mehrdad85
پنج شنبه 16 آبان 1392, 19:34 عصر
اقا میشه دقیقا بفرمایید می خواهید چیکار کنید ؟؟؟ اگه میخواهید که String str[] b رو تو فایل ذخیره کنید String str[] یک reference هست میتونید از ObjectOutputStream استفاده کنید و متد writeObject استفاده کنید:لبخندساده:

سلام
دوست عزیز من میخوام یک []String را داخل یک فایل بنویسم
ممنون میشم بیشتر توضیح بدید و راهنمایی بفرماید که چطور میتونم با stream ها استفاده کنم؟


سپاس

a.seieddokht
پنج شنبه 16 آبان 1392, 20:56 عصر
سلام
دوست عزیز من میخوام یک []String را داخل یک فایل بنویسم
ممنون میشم بیشتر توضیح بدید و راهنمایی بفرماید که چطور میتونم با stream ها استفاده کنم؟


سپاس

سلام خوب دوست عزیز من که بالا نوشتم باشه بیا اینم کدی که ارایه ای از رشته هارو بنویسه تو فایل



import java.io.*;
import java.net.URL;

public class WriteFile {
private File file;
private FileWriter fileWriter;


public WriteFile(String path) throws IOException {
file = new File(path);
if (!file.exists())
file.createNewFile();

fileWriter = new FileWriter(file);
}

public void write(String s) throws IOException {
fileWriter.write(s);
}

public void close() throws IOException {
fileWriter.close();
}


public static void main(String[] args) throws IOException {
WriteFile writeFile = new WriteFile("D:\\a.txt");
String []names = {"ali","reza","hasan","ahmad","hossien","bahram"};
for (int i = 0; i < names.length ;i++) {
writeFile.write(names[i] + "\r\n");
}
writeFile.close();
}
}


موفق باشید:لبخندساده:

a.seieddokht
پنج شنبه 16 آبان 1392, 21:05 عصر
این هم یک روش دیگه از هر کدوم که دوست داری استفاده کن



import java.io.*;
import java.net.URL;

public class WriteFile {
private FileOutputStream fileOutputStream;
private ObjectOutputStream objectOutputStream;

public WriteFile(File file) throws Exception {
fileOutputStream = new FileOutputStream(file);
if (!file.exists())
file.createNewFile();

objectOutputStream = new ObjectOutputStream(fileOutputStream);
}

public void writeToFile(String []str) throws Exception {
for (int i = 0; i < str.length; i++){
fileOutputStream.write((str[i] + "\r\n").getBytes());
}
}

public void close() throws Exception{
objectOutputStream.close();
fileOutputStream.close();
}

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

WriteFile writeFile = new WriteFile(new File("D:\\myFile.txt"));
String []str = {"ali","tehran","mashahd","ahmad","hasan","123454"};
writeFile.writeToFile(str);
writeFile.close();
}
}

agusta.ada
پنج شنبه 16 آبان 1392, 21:35 عصر
با سلام


public void WriteOut(String[] arr) throws IOException
{
File f=new File("D:\\write.txt");
FileWriter fw=new FileWriter(f);
BufferedWriter bw=new BufferedWriter(fw);

for(int i=0;i<20;i++)
{
bw.write(arr[i]);
}
fw.close();
bw.close();
}


این کد که میگی دو تا مشکل داره:
اولی اینکه ;()fw.close نیازی نیست ...
دومی اینکه بایدم null pointer exception پرتاب کند چونکه arr را بصورت آرگومانی میگیرد و اندازه اش میتواند در هر رنجی باشد که شما برای فهمیدن رنجش باید ار length استفاده کنید...

mehrdad85
پنج شنبه 16 آبان 1392, 22:39 عصر
با سلام


public void WriteOut(String[] arr) throws IOException
{
File f=new File("D:\\write.txt");
FileWriter fw=new FileWriter(f);
BufferedWriter bw=new BufferedWriter(fw);

for(int i=0;i<20;i++)
{
bw.write(arr[i]);
}
fw.close();
bw.close();
}


این کد که میگی دو تا مشکل داره:
اولی اینکه ;()fw.close نیازی نیست ...
دومی اینکه بایدم null pointer exception پرتاب کند چونکه arr را بصورت آرگومانی میگیرد و اندازه اش میتواند در هر رنجی باشد که شما برای فهمیدن رنجش باید ار length استفاده کنید...

سلام
دوست عزیز اگه از null pointer.. استفاده کنم باز هم این پیغام خطا را میده . یعنی اینکه واقعا وقتی رشته را پاس میدم به عنوان آرگومان باز هم رشته خالی هستش

mehrdad85
پنج شنبه 16 آبان 1392, 22:51 عصر
سلام
دوستان من کامل فایل و کدم را میزارم چون احساس میکنم دوستان راهنمایی میکنن اما من مشکل کلی ندارم بخشی از کد را زدم و الان به مشکل برخوردم چون حس میکنم یه جایی از کارم یه ایرادی داره که نمیدونم کجاس
ممنون میشم راهنمایی بفرمایید


public class ReadFile
{
String[] input=new String[20];
int i=0;
public void ReadIn()throws IOException
{

File f=new File("D:\\readme.txt");
FileReader fr=new FileReader(f);
BufferedReader br=new BufferedReader(fr);
String line="";
while ((line=br.readLine())!=null)
{
input[i]=line;
i++;
}
br.close();
fr.close();

}


public static void main(String[] args)throws IOException
{
// TODO code application logic here
ReadFile rf=new ReadFile();
rf.ReadIn();
String[] arr=new String[20];
arr=rf.input;
// for(int i=1;i<10;i++)
// {
// System.out.print(arr[i]);
// }
WriteFile wf=new WriteFile();
wf.WriteOut(arr);
}


public class WriteFile {

public void WriteOut(String[] arr) throws IOException
{
File f=new File("D:\\write.txt");
FileWriter fw=new FileWriter(f);
BufferedWriter bw=new BufferedWriter(fw);
try{
for(int i=0;i<20;i++)
{
bw.write(arr[i]);
}
}catch (NullPointerException ex)
{
System.out.print(ex.toString());
}
bw.close();
}

}

agusta.ada
پنج شنبه 16 آبان 1392, 23:24 عصر
سلام
دوست عزیز اگه از null pointer.. استفاده کنم باز هم این پیغام خطا را میده . یعنی اینکه واقعا وقتی رشته را پاس میدم به عنوان آرگومان باز هم رشته خالی هستش
دوست عزیز یعنی چی از null pointer استفاده کنم... شما اول روی نوشته های من اندکی تامل کن...
شما به متد writeOut چه پارامتری ارسال میکنی یه ارایه رشته ای درسته؟ حالا این ارایه رشته ای باید اندازش 20 باشه نه کمتر و نه نا معلوم ...
شما ارایه arr را مقدار دهی نکردید و مقدار اولیه ان null میباشد.

a.seieddokht
جمعه 17 آبان 1392, 00:36 صبح
دوست عزیز یعنی چی از null pointer استفاده کنم... شما اول روی نوشته های من اندکی تامل کن...
شما به متد writeOut چه پارامتری ارسال میکنی یه ارایه رشته ای درسته؟ حالا این ارایه رشته ای باید اندازش 20 باشه نه کمتر و نه نا معلوم ...
شما ارایه arr را مقدار دهی نکردید و مقدار اولیه ان null میباشد.

والا من 2 جور کد واسه این کار نوشتم که مثل بنز کار میکنن نمیدونم دیگه چی بگم چرا ازش استفاده نمیکنید ؟؟؟؟:گریه::گریه::گریه::گریه:: ریه::گریه:

mehrdad85
جمعه 17 آبان 1392, 02:19 صبح
دوست عزیز یعنی چی از null pointer استفاده کنم... شما اول روی نوشته های من اندکی تامل کن...
شما به متد writeOut چه پارامتری ارسال میکنی یه ارایه رشته ای درسته؟ حالا این ارایه رشته ای باید اندازش 20 باشه نه کمتر و نه نا معلوم ...
شما ارایه arr را مقدار دهی نکردید و مقدار اولیه ان null میباشد.

سلام
دوست عزیز پس از تاملات طولانی به این نتیجه رسیدم که مقدار پارامتر null نیست و اون مقدار را از فایل میخونه و کیشه مقادیر داخل اونو چاپ هم کرد

mehrdad85
جمعه 17 آبان 1392, 02:21 صبح
دوستان عزیز مشکلم حل شد . واقعا از همتون بابت وقت و انرژی ای که گذاشتید ممنونم لطف کردید .

agusta.ada
جمعه 17 آبان 1392, 09:37 صبح
سلام
دوست عزیز پس از تاملات طولانی به این نتیجه رسیدم که مقدار پارامتر null نیست و اون مقدار را از فایل میخونه و کیشه مقادیر داخل اونو چاپ هم کرد

با سلام
دوست عزیز اگه اون فایلی که readLine کردی 20 نباشه یک خط کمتر و بیشتر باشه چه اتفاقی میافته...
اگه کمتر باشه arr درست مقدار دهی نمی شود و مابقی مقادیر همان مقدار پیش فرض باقی میماند یعنی null که exception شما میگه مقدار اشاره گر شما null است یعنی حتما JVM به یه مقدار null خورده که اینو میگه حالا نظرات من جای بحث داره ولی نظرات JVM نه.