코드 실행 후 잠재적으로 Java 코드가 중지 될 수 있도록 설정하려고합니다.Java를 줄 단위로 실행
나는 내 코드를 모두 스레드에 넣고 멈추고 싶을 때 Thread.interrupt()
을 호출 할 생각이었다. 스레드 차단 메서드가 실행중인 경우에만이 메서드는 InterruptedException
을 throw합니다 (예 : sleep
, join
, wait
등). 그렇지 않으면 그냥 중단 된 플래그를 설정하고 우리는 모든 라인 이후에 isInterrupted()
을 통해 확인해야합니다.
그래서 지금은 오직 할 필요가 ... 다음 코드를 삽입입니다 코드의 모든 라인 후
if (myThread.isInterrupted()) {
System.exit(0);
}
. 내 Java 코드가 String
에 저장되어있는 경우 코드 실행마다마다이 코드 행을 삽입 할 수 있습니까?
세미콜론에 분할 메서드를 사용하고 결과 배열의 모든 요소 사이에 스레드 코드를 삽입하는 것이 생각 났지만 예를 들어 루프의 끝에 세미콜론이 있기 때문에 작동하지 않습니다. 성명서. 나는 또한 코드 중괄호의 끝을 나타 내기 때문에 중괄호를 닫을 때도 나눠야한다고 생각한다.
편집 : 솔루션 시도가 :
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
왜 모든 코드 행 뒤에 * 할 것인가? 코드가 빠르게 실행되므로 중요한 부분 만 수행하면됩니다. 장기 실행 루프의 시작 부분 등. 중단되기 전에 다시 0.000001 초가 걸릴지는 중요하지 않습니다. 그렇습니까? * 참고 : 내 컴퓨터는 0.000001 초에 200 개의 간단한 문을 수행 할 수 있습니다. * – Andreas
인터럽트 가능 자바 코드가 필요합니다. 장기 실행 자바 코드를 부여 받았기 때문에 일정 금액만큼 빨리 중지 할 수 있기를 바랍니다. 시간이지나갑니다. 또한, 나는 코드를 디버깅하려하지 않는다. 나는 실행할 코드를 받았고 어느 시점에서든 코드를 중단 할 수 있어야합니다. – Ogen