Rapha,
You are correct - thanks taking the time to look at this. I was lost in
a maze of little passages that all looked the same.
Terry
Rapha wrote:
Your 'testrunner' function takes no arguments:
Test.prototype = {
testrunner: function() {
print(this.value);
},
start: function() {
print("Starting ....");
this.gzthread.start();
}
}
This 'testrunner' function is then "bound" to the 'onrun' property.
Test = function() {
this.value = "A test value";
this.gzthread = new gzThread();
this.gzthread.onrun = this.testrunner.gzbind(this);
}
Later on, you try to call this 'onrun' function with an argument
(this), when the function actually has arity 0.
try {
this.onrun(this);
} catch (ioe ) {
calling:
this.onrun()
instead makes it work.
HTH
Raphael
On Mar 11, 5:25 am, Terry Braun <[email protected]> wrote:
My mistake the problem remains - I had an extra line of code. Anyone
have any ideas?
Thanks
Terry
Terry Braun wrote:
The answer is "don't call it onrun".
The java adapter has its own method called onrun() so it finds that.
If you change the name to onxrun and then add the line
for (n in this) print(n);
before the call to
this.onrun(this)
you will see there are BOTH "onrun" and "onxrun" properties. And it
works in both cases.
Name collision.
Terry Braun wrote:
Should I file this as a bug?
Terry Braun wrote:
Ok, here is the whole thing
---- cut ------------
importPackage(java.io);
importPackage(java.util);
importPackage(java.net);
importPackage(java.util.concurrent);
importPackage(java.lang);
Function.prototype.gzbind = function(object){
var fn = this;
return function(){
return fn.apply(object, arguments);
};
};
gzThread = function() {
this.isrunning = false;
// here the program works uncomment the next two lines
// this.thread = new java.lang.Thread(new
java.lang.Runnable(this));
// this.thread.setDaemon( false );
}
gzThread.prototype = {
start: function() {
// creating a thread here does not work
this.thread = new java.lang.Thread(new
java.lang.Runnable(this));
this.thread.setDaemon( false );
this.isrunning = true;
this.thread.start();
return this;
},
stop: function() {
if (this.isRunning == true ) {
this.isRunning = false;
this.thread.interrupt();
this.thread.join(1000);
if (this.onstop ) {
this.onstop();
}
}
},
current: function() {
return java.lang.Thread.currentThread();
},
run: function() {
if ( this.onrun == null || this.isRunning == true) {
return this;
}
this.isRunning = true
try {
this.onrun(this);
} catch (ioe ) {
var w, m;
if ( ioe.rhinoException
&& ioe.rhinoException instanceof
org.mozilla.javascript.WrappedException
&& (w = ioe.rhinoException.getWrappedException())
&& (s = w.getMessage() )
&& s == "sleep interrupted") {
} else {
if ( ioe.rhinoException ) {
ioe.rhinoException.printStackTrace();
} else if ( ioe.javaException ) {
ioe.printStackTrace();
}
}
}
return this;
}
}
Test = function() {
this.value = "A test value";
this.gzthread = new gzThread();
this.gzthread.onrun = this.testrunner.gzbind(this);
}
Test.prototype = {
testrunner: function() {
print(this.value);
},
start: function() {
print("Starting ....");
this.gzthread.start();
}
}
var t = new Test();
t.start();
_______________________________________________
dev-tech-js-engine-rhino mailing list
[email protected]
https://lists.mozilla.org/listinfo/dev-tech-js-engine-rhino
_______________________________________________
dev-tech-js-engine-rhino mailing list
[email protected]
https://lists.mozilla.org/listinfo/dev-tech-js-engine-rhino