View Full Version : سوال: خواندن خروجی برنامه
ravand
دوشنبه 29 آبان 1391, 14:27 عصر
من برنامه ی زیر رو نوشتم ولی خروجیش درست نشون داده نمیشه .
از چه دستوراتی باید استفاده کنم ؟
package testi;
import java.net.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws Exception {
Process proc = Runtime.getRuntime().exec("ping " + "site.ir");
System.out.println(proc);
}
}
متشکرم.
ravand
دوشنبه 29 آبان 1391, 16:59 عصر
فهمیدم باید چیکار کنم:
package testi;
import java.io.*;
public class Main {
public static void main(String[] a) throws IOException {
Process p = Runtime.getRuntime().exec("ping 192.168.0.4");
InputStreamReader in = new InputStreamReader(p.getInputStream());
BufferedReader br = new BufferedReader(in);
int c;
while ((c = br.read()) != -1)
System.out.print((char) c);
}
}
ravand
سه شنبه 30 آبان 1391, 10:58 صبح
به کدهای من نگاه کنید:
JButton b=new JButton("بررسی");
b.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0){
//ip
try {
Process p = Runtime.getRuntime().exec("netstat -b 5");
InputStreamReader in = new InputStreamReader(p.getInputStream());
BufferedReader br = new BufferedReader(in);
String str="";
while((str = br.readLine())!=null){
System.out.println(str);
text5.setText("str");
}
}
catch(Exception e) {
throw new RuntimeException(e);
}
//end
}
});
من میخوام با کلیک روی دکمه این کدهای من اجرا بشه و خروجیش به کد زیر داده بشه تا در textarea مقادیر خروجی برنامه نمایش داده بشه:
text5.setText(str);
ولی نمدونم چرا مقادیر متغییر str به textarea داده نمیشه.
اینم کدهای texeare :
final JTextArea text5 = new JTextArea(18,30);
final JScrollPane pane = new JScrollPane(text5);
p_ooya
سه شنبه 30 آبان 1391, 11:22 صبح
من کد شما رو اجرا کردم و فکر میکنم میکنم ایراد کار اینه که شما setText رو توی حلقه دارید و دچار مشکل فریز شدن gui میشید. بیاد یه فکری برای مشکل فریز شدن gui بکنید. اگه کد زیر رو اجرا کنید متوجه منظور من میشید:
try {
Process p = Runtime.getRuntime().exec("netstat -b 5");
InputStreamReader in = new InputStreamReader(p.getInputStream());
BufferedReader br = new BufferedReader(in);
String str = "";
int k=0;
while (((str = br.readLine()) != null) && k<5) {
k++;
System.out.println(str);
jTextField1.setText(str);
}
} catch (Exception e) {
throw new RuntimeException(e);
}
در کد بالا، بعد از اینکه حلقه پنج بار اجرا میشه و کارش به پایان میرسه، textbox فرصت آپیدیت کردن خودش رو پیدا میکنه و مقدار مربوط به ایتریشن پنجم رو نشون میده. امیدوارم متوجه منظورم شده باشی.
پ.ن: توی کدی که بالا نوشتید، خط ۱۲ احتیاج به ویرایش داره.
ravand
سه شنبه 30 آبان 1391, 11:31 صبح
متشکرم.
الان این چیزی که شما نوشتی فقط یک مقدار رو نمایش میده. به قول شما این فرصت رو داره که یک مقدار رو نمایش بده.
ولی من باید کاری کنم که تمام مقادیر پشت سر هم نمایش داده بشه.
باید چیکار کرد؟
p_ooya
سه شنبه 30 آبان 1391, 11:40 صبح
اگر از swing استفاده میکنی یه ایده خوب، swing timer هست که اصولاً با همین هدف طراحی شده و کار کردن باهاش خیلی خیلی ساده است. یه تایمر هست که سازندهاش تو تا پارامتر داره: یک time interval و یک action listener که در هر کنترل میشه. من چند خط کد راجع بهش دارم ولی نمیدونم کجاست :لبخند:
تا من کدم رو پیدا کنم شما میتونی این دو تا لینک رو ببینی و بعد از خوندنشون بعید میدونم که به کد من احتیاج داشته باشی. اگر مشکلی بود بگو تا من کد رو پیدا کنم:
http://stackoverflow.com/questions/1006611/java-swing-timer
http://docs.oracle.com/javase/6/docs/api/javax/swing/Timer.html
فقط توجه داشته باش که این تایمر معمولی جاوا نیست و تایمری هست که توی پکیج swing قرار گرفته.
ravand
سه شنبه 30 آبان 1391, 11:53 صبح
من اینو تست کردم ولی نمیدونم چرا برام کار نمیکنه. اگه میشه اون کدی که گفتید رو بدید متشکرم
ravand
سه شنبه 30 آبان 1391, 13:37 عصر
من از روش شما استفاده نکردم ولی از یه روش دیگه برای تایمر استفاده کردم ولی یک مقدار رو چند بار تکرار کرد ولی مقادیر بعدی رو نیاورد.
spiderman200700
سه شنبه 30 آبان 1391, 20:31 عصر
میتونی همه ی مقادیر رو توی یه String بریزی و بعدی از اتمام کار حلقه String رو بریزی توی JTextArea
ravand
سه شنبه 30 آبان 1391, 20:33 عصر
این کارم کردم ولی نشد
spiderman200700
چهارشنبه 01 آذر 1391, 00:34 صبح
من اینو نوشتم و کار کرد. ولی خیلی طول میکشه تا برنامه تموم بشه کارش. باید صبر ایوب داشته باشی.
new Thread(new Runnable() {
@Override
public void run() {
try {
Process p = Runtime.getRuntime().exec("netstat -b 5");
InputStreamReader in = new InputStreamReader(p.getInputStream());
BufferedReader br = new BufferedReader(in);
String str = "";
while ((str = br.readLine()) != null) {
System.out.println(str);
jTextArea1.append(str+"\n");
}
} catch (IOException ex) {
Logger.getLogger(NewJFrame.class.getName()).log(Le vel.SEVERE, null, ex);
}
}
}).start();
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.