जावास्क्रिप्ट चलाने का निष्पादन नीचे दिए तरीक़े का उपयोग करके किया जा सकता है रोक।
1) एक डमी डीबगर बनाएँ और शुरू में बनाई गई संदर्भ में संलग्न करें।
mContext = Context.enter();
निरीक्षण करने वाले डीबगर = dudeugger = new ObservingDebugger();
mContext.setDebugger (देखकर डिबगर, नया इंटीजर (0));
mContext.setGeneratingDebug (सत्य);
mContext.setOptimizationLevel (-1);
पर्यवेक्षण डिबगर कोड निम्नानुसार दिखता है।
import org.mozilla.javascript.Context;
import org.mozilla.javascript.Scriptable;
import org.mozilla.javascript.debug.DebugFrame;
import org.mozilla.javascript.debug.DebuggableScript;
import org.mozilla.javascript.debug.Debugger;
public class ObservingDebugger implements Debugger
{
boolean isDisconnected = false;
private DebugFrame debugFrame = null;
public boolean isDisconnected() {
return isDisconnected;
}
public void setDisconnected(boolean isDisconnected) {
this.isDisconnected = isDisconnected;
if(debugFrame != null){
((ObservingDebugFrame)debugFrame).setDisconnected(isDisconnected);
}
}
public ObservingDebugger() {
}
public DebugFrame getFrame(Context cx, DebuggableScript fnOrScript)
{
if(debugFrame == null){
debugFrame = new ObservingDebugFrame(isDisconnected);
}
return debugFrame;
}
@Override
public void handleCompilationDone(Context arg0, DebuggableScript arg1, String arg2) { } }
// internal ObservingDebugFrame class
class ObservingDebugFrame implements DebugFrame
{
boolean isDisconnected = false;
public boolean isDisconnected() {
return isDisconnected;
}
public void setDisconnected(boolean isDisconnected) {
this.isDisconnected = isDisconnected;
}
ObservingDebugFrame(boolean isDisconnected)
{
this.isDisconnected = isDisconnected;
}
public void onEnter(Context cx, Scriptable activation,
Scriptable thisObj, Object[] args)
{ }
public void onLineChange(Context cx, int lineNumber)
{
if(isDisconnected){
throw new RuntimeException("Script Execution terminaed");
}
}
public void onExceptionThrown(Context cx, Throwable ex)
{ }
public void onExit(Context cx, boolean byThrow,
Object resultOrException)
{ }
@Override
public void onDebuggerStatement(Context arg0) { } }
ObservingDebugger वर्ग बूलियन चर "isDisconnected" प्रबंधन करेगा और जब प्रयोक्ता रोकें बटन पर क्लिक करता है तो यह चर सही पर सेट है (निष्पादन बंद करना चाहता है)। एक बार परिवर्तनीय सत्य पर सेट हो जाने के बाद राइनो निष्पादन तुरंत समाप्त हो जाएगा।
observingDebugger.setDisconnected(true);
@ डोनल: डिफ़ॉल्ट के रूप में इस ContextFactory उपयोग करने के लिए, बस आह्वान
अपने प्रतिदेय की कॉल विधि के अंदर, आप त्रुटि पर कब्जा कर सकते हैं यह हो सकता है जनसंपर्क मोटे तौर पर काम नहीं करते क्योंकि एक बार जब मैं नया धागा बना देता हूं और राइनो इंजन को लोड करना और निष्पादित करना शुरू करता हूं, उस समय से संदर्भ पर मूल्यांकनकर्ता() विधि को थ्रेड निष्पादन पूर्ण किया जाता है और राइनो इंजन आंतरिक रूप से निष्पादन का प्रबंधन करता है। – Syam
यही कारण है कि मैंने सुझाव दिया कि इसे अपने धागे समूह में रखा जाए; राइनो द्वारा बनाए गए किसी भी अन्य थ्रेड अभी भी उस थ्रेड समूह (या एक बच्चे थ्रेड समूह) में होंगे, इसलिए अब भी उन्हें सभी को _k करना संभव होगा। –