Index: debuggerjpda/api/src/org/netbeans/api/debugger/jpda/JPDAThread.java =================================================================== RCS file: /cvs/debuggerjpda/api/src/org/netbeans/api/debugger/jpda/JPDAThread.java,v retrieving revision 1.5 diff -u -r1.5 JPDAThread.java --- debuggerjpda/api/src/org/netbeans/api/debugger/jpda/JPDAThread.java 7 Jan 2005 09:33:20 -0000 1.5 +++ debuggerjpda/api/src/org/netbeans/api/debugger/jpda/JPDAThread.java 20 May 2005 13:09:39 -0000 @@ -7,7 +7,7 @@ * http://www.sun.com/ * * The Original Code is NetBeans. The Initial Developer of the Original - * Code is Sun Microsystems, Inc. Portions Copyright 1997-2000 Sun + * Code is Sun Microsystems, Inc. Portions Copyright 1997-2005 Sun * Microsystems, Inc. All Rights Reserved. */ @@ -111,6 +111,11 @@ * Unsuspends thread. */ public abstract void resume (); + + /** + * Interrupts this thread unless the thread has been suspended. + */ + public abstract void interrupt(); /** * Returns file name this frame is stopped in or null. Index: debuggerjpda/src/org/netbeans/modules/debugger/jpda/models/JPDAThreadImpl.java =================================================================== RCS file: /cvs/debuggerjpda/src/org/netbeans/modules/debugger/jpda/models/JPDAThreadImpl.java,v retrieving revision 1.10 diff -u -r1.10 JPDAThreadImpl.java --- debuggerjpda/src/org/netbeans/modules/debugger/jpda/models/JPDAThreadImpl.java 7 Apr 2005 15:20:55 -0000 1.10 +++ debuggerjpda/src/org/netbeans/modules/debugger/jpda/models/JPDAThreadImpl.java 20 May 2005 13:09:39 -0000 @@ -7,7 +7,7 @@ * http://www.sun.com/ * * The Original Code is NetBeans. The Initial Developer of the Original - * Code is Sun Microsystems, Inc. Portions Copyright 1997-2000 Sun + * Code is Sun Microsystems, Inc. Portions Copyright 1997-2005 Sun * Microsystems, Inc. All Rights Reserved. */ @@ -279,6 +279,18 @@ } catch (VMDisconnectedException ex) { } + } + + /** + * Interrupts this thread unless the thread has been suspended. + */ + public void interrupt() { + try { + if (isSuspended ()) return; + threadReference.interrupt(); + } catch (ObjectCollectedException ex) { + } catch (VMDisconnectedException ex) { + } } /** Index: debuggerjpda/ui/src/org/netbeans/modules/debugger/jpda/ui/models/Bundle.properties =================================================================== RCS file: /cvs/debuggerjpda/ui/src/org/netbeans/modules/debugger/jpda/ui/models/Bundle.properties,v retrieving revision 1.23 diff -u -r1.23 Bundle.properties --- debuggerjpda/ui/src/org/netbeans/modules/debugger/jpda/ui/models/Bundle.properties 17 May 2005 17:02:19 -0000 1.23 +++ debuggerjpda/ui/src/org/netbeans/modules/debugger/jpda/ui/models/Bundle.properties 20 May 2005 13:09:39 -0000 @@ -135,6 +135,7 @@ CTL_ThreadAction_GoToSource_Label = Go To Source CTL_ThreadAction_Suspend_Label = Suspend CTL_ThreadAction_Resume_Label = Resume +CTL_ThreadAction_Interrupt_Label = Interrupt #ThreadsActionsProvider CTL_CallstackAction_MakeCurrent_Label = Make Current Index: debuggerjpda/ui/src/org/netbeans/modules/debugger/jpda/ui/models/ThreadsActionsProvider.java =================================================================== RCS file: /cvs/debuggerjpda/ui/src/org/netbeans/modules/debugger/jpda/ui/models/ThreadsActionsProvider.java,v retrieving revision 1.8 diff -u -r1.8 ThreadsActionsProvider.java --- debuggerjpda/ui/src/org/netbeans/modules/debugger/jpda/ui/models/ThreadsActionsProvider.java 1 Apr 2005 15:42:02 -0000 1.8 +++ debuggerjpda/ui/src/org/netbeans/modules/debugger/jpda/ui/models/ThreadsActionsProvider.java 20 May 2005 13:09:39 -0000 @@ -127,6 +127,31 @@ Models.MULTISELECTION_TYPE_ALL ); + private Action INTERRUPT_ACTION = Models.createAction ( + NbBundle.getBundle(ThreadsActionsProvider.class).getString("CTL_ThreadAction_Interrupt_Label"), + new Models.ActionPerformer () { + public boolean isEnabled (Object node) { + if (node instanceof MonitorModel.ThreadWithBordel) node = ((MonitorModel.ThreadWithBordel) node).originalThread; + if (node instanceof JPDAThread) + return !((JPDAThread) node).isSuspended (); + else + return false; + } + + public void perform (Object[] nodes) { + int i, k = nodes.length; + for (i = 0; i < k; i++) { + Object node = (nodes[i] instanceof MonitorModel.ThreadWithBordel) ? + ((MonitorModel.ThreadWithBordel) nodes[i]).originalThread : nodes[i]; + if (node instanceof JPDAThread) { + ((JPDAThread) node).interrupt(); + } + } + } + }, + Models.MULTISELECTION_TYPE_ALL + ); + private JPDADebugger debugger; @@ -155,6 +180,7 @@ return new Action [] { MAKE_CURRENT_ACTION, a, + INTERRUPT_ACTION, GO_TO_SOURCE_ACTION, }; } else