コード実行後に潜在的に停止するようにJavaコードを設定しようとしています。Javaを1行ずつ実行しています
スレッド内にすべてのコードを入れて、それを停止したいときにThread.interrupt()
を呼び出すことを考えていました。スレッドブロッキングメソッドが実行されている場合(sleep
、join
、wait
など)、このメソッドによってコードにはInterruptedException
がスローされます。それ以外の場合は、中断したフラグを設定するだけで、すべての行の後にisInterrupted()
でチェックする必要があります。
だから今、私がする必要があるすべては...コードのすべての行の後
if (myThread.isInterrupted()) {
System.exit(0);
}
を次のコードを挿入しています。私のJavaコードがString
に格納されている場合、コードの実行のたびにこの行のコードを挿入するにはどうすればよいですか?
私はsplitメソッドをセミコロンで使用し、結果の配列内のすべての要素の間にスレッドコードを挿入することを考えていましたが、forループが機能しないため、forループは終わりを表しません。ステートメント。コードステートメントの終わりを表すので、中括弧も閉じなければならないと思います。
EDIT:ソリューションの試み:
final String javaCode = "if (myString.contains(\"foo\")) { return true; } int i = 0;";
final String threadDelimiter = "if (thisThread.isInterrupted()) { System.exit(0); }";
final StringBuffer sb = new StringBuffer();
for (int i = 0; i < javaCode.length(); i++) {
final char currChar = javaCode.charAt(i);
sb.append(currChar);
if ("{};".contains(currChar + "")) {
sb.append(threadDelimiter);
}
}
System.out.println(sb);
このコードは、ほぼ正しいが、それは、セミコロンを使用して、ループの任意の並べ替えのために動作しないでしょう。また、中括弧を持たないループでは機能しません。
"* Javaコードを設定して、コード実行後に潜在的に停止するようにしようとしています。どうして?何かをデバッグしようとしていますか?その場合は、デバッガを使用してプログラムを一時停止し、行単位でステップ実行することができます。そうでなければ、あなたの目標はここにあります。 'SIGINT'を送るだけでプログラムを終了させることができます。 – dimo414
なぜコードを1行おきにしたいのですか?コードは高速で実行されるため、重要なポイントとなります。長時間実行されるループの開始時などに実行されます。中断される前に0.000001秒かかるかどうかは問題ではありませんか? *参考:私のマシンは0.000001秒で200個の簡単なステートメントを実行できます。* – Andreas
私は割込み可能なJavaコードを必要としています。私は長時間実行しているJavaコードを与えられています。時間が経過してる。また、私はコードをデバッグしようとしていません。実行するコードが与えられており、いつでも中断する必要があります。 – Ogen