Re: pass-by-reference(of StringBuffer) to a constructor of another
class
sravan_reddy001 <sravanganta2002@gmail.com> writes:
I had a problem with pass-by reference...
In Java?
i have two classes in my application, and one class should send a
string to other..
....
the two classes are implements Runnable and one Class extends Thread.
and this a Networking application
in the run method of class A, i am creating an object of class B
calling is as
A's prog:
Please post the *entire* class, and as compilable code.
<URL:http://mindprod.com/jgloss/sscce.html>
I'll assume that this method is merely wrapped in
public class A implements Runnable {
...
}
public void run()
{
Socket s=sc.accept();
StringBuffer c=new StringBuffer;
B c=new B(s,c);
---> the new value of b is not available here
What b? There is no b here. Do you mean that c is not updated?
What were you expecting? How would you test it?
}
B's prog:
Here I'll assume that this constructor and method is in a class defined
as
public class B extends Thread {
...
}
B(Socket a,StringBuffer b)
{
string mm;
This is not the code you are using. String should be capitalized,
and I'm guessing this should be a field, not a variable local
to the constructor.
this.start();
Starting itself in the constructor is extremely bad style. This means
that other parts of the object might be run *before* the constructor
finishes. Or they might not. Nobody knows.
b=b.append(mm);
Most likely the thread has not started running its run method yet, so
mm is still null at this point.
}
public void run()
{
mm="message";
Again, I'm assuming mm is a field.
}
Your problem is with threading. You can't know when the new thread you
started has finished, unless you use synchronization to fix the
execution order of the two threads, or if you wait for the thread to
finish. Even then you need synchronization to ensure that the update
of mm performed by the other thread is visible.
--
Lasse Reichstein Nielsen - lrn@hotpop.com
DHTML Death Colors: <URL:http://www.infimum.dk/HTML/rasterTriangleDOM.html>
'Faith without judgement merely degrades the spirit divine.'