|
geniuspc wrote: i think if it is possible to program using bytecode the program itself would be more neat and faster as well as it is when u program in assembly.
That's certainly far from being true, otherwise why would there be any high-level languages like Java ? You tend to forget that designing a very big program in assembler becomes very quickly something totally unmaintainable and with probably a lot more bugs than if you would write in in C++ (for instance). Most of the time, the compiler is smart enough to generate efficient assembly code from your C++ code and the higher-level abstraction forces you to avoid certain "errors".
What you seem to forget is that a well-written C++ code will probably run faster and with less errors than a badly written assembler code. And the assembler language is not really well suited for writing large applications which might need to be refactored or adapted in the future.
To finish, I will simply refer to a quote from Donald Knuth: "Premature optimization is the root of all evil". Which is what you are trying to do in your case: assembler is faster than C++, so I will write my code in assembler (and you forget about the humain in the chain that would write more efficient code in C++ than in assembler).
|
|
|
|
|
Yes, it is possible. Yes, there is documentation available. Yes, there are editors available to let you do it.
But unless you have some very specific requirements you would have to be completely barmy to consider writing bytecode by hand. The fact that you can do something doesn't mean that you should.
|
|
|
|
|
geniuspc wrote: i think if it is possible to program using bytecode the program itself would be more neat and faster as well as it is when u program in assembly
That is wrong. Perhaps bytecode looks like assembly, smells like assembly, tastes like assembly, but it is still bytecode. Probably it would be less neat, and sure it would not be faster.
|
|
|
|
|
To reiterate what others have said, writing byte code rather than Java would be synonymous to writing machine code rather than C.
Consider the problem domain. If there is a genuine performance issue, then it could be addressed using a lower level language - byte code or even assembler / machine code - but more often than not a high level language - C/ C++ for examples - and a targeted compiler will be enough.
In my limited experience - a mere 25 years - the better abstraction the language provides the less problems there will be with the code. The majority of bugs are due to simple mistakes by the programmer, by reducing the possibility of these the quality of the code is improved.
Panic, Chaos, Destruction.
My work here is done.
or "Drink. Get drunk. Fall over." - P O'H
OK, I will win to day or my name isn't Ethel Crudacre! - DD Ethel Crudacre
|
|
|
|
|
Hi,
I'm new to using Runtime.getRuntime().exec on WindowsXP, JRE 6.
Solution should work on all Windows NT from 5 upwards and common UNIX.
I called it in the following way
process = Runtime.getRuntime().exec(cmdargs);
where
cmdargs[0] = "D:\Somepath\NmMutex"
cmdargs[1] = "lock"
Program NmMutex with argument lock runs until its process is stopped externally.
When
Runtime.getRuntime().exec(cmdargs);
is called, the calling thread remains suspended, until program NmMutex is killed.
Is that the normal behaviour of Runtime.exec? I thought the calling thread would return, even if the program it started is still running, so I can observe the prog by reading its stdout and stderr from my Java app. If not it would return there would be no process created and I could not observe the program.
Which way is best to solve that? Start prog in Background, like
process = Runtime.getRuntime().exec("start /B NmMutex lock");
resp.
process = Runtime.getRuntime().exec("& NmMutex lock");
?
Thank you
Werner
|
|
|
|
|
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......");
}
}
|
|
|
|