|
It looks like Runtime.exec() is blocking on the process it spawned (like the old Unix exec()?). I can think of two portable solutions:
1. start a new Thread to do the exec() and let it block.
2. use ProcessBuilder.start()[^] This article[^] discusses the use of ProcessBuilder and Runtime.
Cheers,
Peter
Software rusts. Simon Stephenson, ca 1994.
|
|
|
|
|
It looks like that, although I'm much surprised, because this is not what Runtime.exec should do, when I read into the docs - ehm - assumed I understood them also.
1 might work, but you don't get the process handle, because calling thread is suspended before return from call
2 yes right, I think its worth trying because it seems to be more convenient
thank you
Werner
|
|
|
|
|
I couldn't see anywhere the blocking/non-blocking behaviour of exec() was specified.
I think I read somewhere that ProcessBuilder is the preferred technology since Java 5. Certainly looks a lot more usable, although I haven't used either in anger.
Cheers,
Peter
Software rusts. Simon Stephenson, ca 1994.
|
|
|
|
|
Hi,
I tried the same with process builder
ProcessBuilder pbuilder = new ProcessBuilder(cmdlist);
process = pbuilder.start();
procmon = new ProcessMonitor(process);
where
cmdlist[0] = "D:/MyPath/NmMutex"
cmdlist[1] = "lock" (btw. this doesn't mean the main thread waits at lock, its try_lock)
The thread returns as soon as the process, which was called ended. I tested it with a loop whithin the external process. If it is finite, the thread returns. If it is infinite the thread doesn't return. I.e. exec and start are blocking.
The idea to call ProcessBuilder.start within a separate process is basically good, but I woudn't receive a process handle when start would not return. And without that, I would not be able to attach streams to the stdout and stderr. Hence the process might block as soon as the stdout and stderr buffers are filled up.
If I started a background shell and within that my process, the solution would be os dependend (not KISS, complicated, not that good).
Thanks
Werner
|
|
|
|
|
Hi,
the process started by ProcessBuilder
and by Runtime.exec - which is implemented via ProcessBuilder -
is started asynchronously when the java app is started from jar.
The effect of the frozen thread happened exclusively within the debbuger session.
I should have tried.
Sorry
and thanks again
Werner
|
|
|
|
|
// I need someone to help me fix this codes
// it's about CALCULATING in Java, thanks alot...
import java.util.Scanner;
public class Calculate
{
static Scanner in = new Scanner(System.in);
public static void main(String [] args)
{
String sign;
int num1;
int num2;
int num3;
int ans;
System.out.print("Enter your Calculations => \n");
sign = in.nextLine();
if(args.Length == 3)
{
num1 = Integer.parseInt(args[0]);
sign = (args [1].equal("1"));
num2 = Integer.parseInt(args[2]);
num3 = Integer.parseInt(args[3]);
ans = num1 + num2;
ans = num1 - num2;
ans = num1 / num2;
System.out.println("Answer = "+ ans);
}else if(args[1].equal("+")) {
ans = num1 + num2;
System.out.println("num1 "+ "num2 " = ans);
}
else if(args[2].equal("-")) {
ans = num1 - num2;
System.out.println("num1 "- "num2 "= ans);
}
else if(args[3].equal("/")) {
ans = num1 / num2;
System.out.println("num1 "/ "num2 "= ans);
}
else if("Do it again => Calculate arg1, arg2, arg3");
}
}
}
modified on Wednesday, January 19, 2011 9:58 AM
|
|
|
|
|
Please consider the following points:
1) Put your question inside the body of the message and keep a concise but precise title
2) Use the "code block" button to format your code so that it is readable
3) Provide the information which is required for us to understand the problem (in your case, what you are getting and what you were expecting). How can we guess what you had in mind when writing your code ?
Related to your question: there are a couple of points which are wrong in your code.
1) You have three consecutive lines in which you assign a value to ans (num1+num2, num1-num2, num1/num2). Only the last value will be kept, since the other ones will be overriden (so, what's the point of having those lines anyway ?)
2) The sign variable is never used
3) If you don't fall in the first if, then you are using the num1 and num2 variables which are not initialized.
4) In the different else, you check for args[1], then args[2], then args[3] for the type of operation to execute. I would guess that it is always at the same position (args[1]).
I suggest that you read some basic tutorial about java because it seems you are confused about some fundamental concepts.
|
|
|
|
|
thanks alot Mr. Cedric
the reason for this code is that l wonted to do CALCULATING IN JAVA?
l understand u completely but for now,how should l make the code work(l mean to initialize it)and not to fall back the way l was before?
thanks for ur alert for the tutorials.please help me for this one...
modified on Wednesday, January 19, 2011 9:57 AM
|
|
|
|
|
You can already fix the points I mentionned in my previous message, this was detailed enough for you to understand the problems.
You don't expect us to write the program for you, do you ?
|
|
|
|
|
thanks again..
l dont wont u to write all the program for for but to guide me Fix the errors is all what l need..but thanks alot for ur time becouse this's my first time of sending a code in this forum...
modified on Wednesday, January 19, 2011 10:02 AM
|
|
|
|
|
Try here[^] for some good tutorials that will help you with your problem.
I must get a clever new signature for 2011.
|
|
|
|
|
Mr. Cedric
please a question?
1- how should make the sign veriable work and?
2- how to initialize those to variables( num1 and num2)?
|
|
|
|
|
Initialize your variables at the beginning of the program by reading ONCE the command line arguments: only do this of course if the number of arguments match, otherwise you exit the program with an error.
BTW, you have another problem: you are expecting 3 command line arguments but you retrieve four of them (num3 is initialized with args[3], which is out of bounds).
|
|
|
|
|
//l've change the code but still 1 error has been occur
public static void main(String [] args)
{
String sign;
int num1;
int num2;
//int num3;
int ans;
System.out.print("Enter your Calculations =>: \n");
sign = in.nextLine();
if(args.Length == 3)
{
num1 = Integer.parseInt(args[0]);
sign = (args [1].equal("1"));
num2 = Integer.parseInt(args[2]);
//num3 = Integer.parseInt(args[3]);
System.out.println("Answer = "+ ans);
}else if(args[0].equal("+")) {
ans1 = num1 + num2;
System.out.println("num1 "+ "num2 " = ans);
}
else if(args[1].equal("-")) {
ans2 = num1 - num2;
System.out.println("num1 "- "num2 "= ans);
}
else if(args[2].equal("/")) {
ans3 = num1 / num2;
System.out.println("num1 "/ "num2 "= ans);
}
System.err.println("Try Again");
}
}
}
|
|
|
|
|
Please refer to the first part of my initial message (code formating and providing information about your problem).
You should put your else conditions inside the first if (and replace the first else condition by an else condition). In your example you are checking if you have 3 arguments and only if that's not the case you will check the sign argument.
|
|
|
|
|
Mr. Cedric,
I think u've tried alot best for me but l did try what u said and l got 3 error.
anyway,l appreciate very well for ur help since am a beginner in java and once l cant compile this code those not make me to stop learning?please if u get anytime,try and correct this code for another people to lean from it?
remain bless always from God..
I'll go back and learn the tutorials...thanks.
|
|
|
|
|
The tutorials (see the link I provided) will get you to the answers faster and better than struggling with the above sample. You obviously have some gaps in your knowledge of some of the basic concepts, and should learn and understand those first before you try to write a program like the one above. Starting at the beginning will get you up to speed much faster than trying to start from the middle.
I must get a clever new signature for 2011.
|
|
|
|
|
please if u get anytime,try and correct this code for another people to lean from it?
come on! If you're just searching for the code, go to google.
This is a simple code used in training throughout the world, nearly every learner has to do this task at a certain point while learning.
How are you trying to compile the code? You should use eclipse or netbeans - those are freeware and should help you a lot along your way.
What do those editors say if you try to compile your code? Most times it should be fairly easy to figure out the errors. Even automatic help is often granted!
regards
Torsten
I never finish anyth...
|
|
|
|
|
l've done it the code has compiled?
|
|
|
|
|
Mr. Cedric Moonen
bellow is the code that l did compile and it works perfectly..thanks alot..
public class Calculate {
public static void main(String[] args) {
double x,y;
if (args.length == 3)
{
x = Double.parseDouble(args[0]);
y = Double.parseDouble(args[2]);
if(args[1].equals("+"))
{
System.out.println("Answer = "+ (x + y));
}else
if(args[1].equals("-"))
{
System.out.println("Answer = "+ (x - y));
}else
if(args[1].equals("/"))
{
System.out.println("Answer = "+ (x / y));
}else
if(args[1].equals("x"))
{
System.out.println("Answer = "+ (x * y));
}
}else
System.out.println("Do it again......");
}
}
|
|
|
|
|
I had this delete button and when i click it this errors comes out.
java.lang.RuntimeException: Number of conflicts while synchronizing: 1 SyncResolver.DELETE_ROW_CONFLICT row 4 more than one row matched delete statement
how can i solve this?
|
|
|
|
|
You're trying to delete a row which is not identified clearly.
There are other rows, which also match your search pattern. So you need to change the way the rows are identified or the way of detecting the row, which has to be deleted.
regards
Torsten
I never finish anyth...
|
|
|
|
|
Hello guys!
I`m writing on a programming assignment and I`ve reached this question:
Describe the technique of layering I/O streams. Give some code for a client to show how this technique could be used to read doubles from files that arrive over a TCP/IP network in compressed form.
Even though I have some years of programming (not only Java), I'm not happy with my answer describing the layering.
As for the second part of the question, I don`t know how to read compressed data coming from Sockets...
Could you please help me with some insights and links?
Many thanks!
Shpid3r
|
|
|
|
|
|
Is there any automated way of doing indentation in my lengthy code?? i mean is there any option available in eclipse or either in Netbeans??
|
|
|
|