Хммм... Есть такой хак:
| Код | import javax.tools.JavaCompiler; import javax.tools.StandardJavaFileManager; import javax.tools.ToolProvider; import java.io.*;
public class Tester { public static void main(String args[]) { Tester obj = new Tester(); StringBuffer sb=new StringBuffer(); sb.append("public class MyPrinter\n"); sb.append("{\n"); sb.append("public static void main(String[] args)\n"); sb.append("{\n"); sb.append("\tfor(int i=0; i < 1000000; i++)\n"); sb.append("\t\tSystem.out.println(i);\n"); sb.append("\t}\n"); sb.append("}\n"); File file=new File("MyPrinter.java"); try { file.delete(); file.createNewFile(); OutputStream os=new FileOutputStream(file, false); Writer writer=new OutputStreamWriter(os); writer.write(sb.toString()); writer.close(); JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); StandardJavaFileManager filemanager = compiler.getStandardFileManager(null, null, null); Iterable compilationUnits = filemanager.getJavaFileObjects(file); compiler.getTask(null, filemanager, null, null, null, compilationUnits).call(); filemanager.close(); Runtime.getRuntime().exec("java MyPrinter > output.txt"); } catch(Exception e) { e.printStackTrace(); } } }
|
Суть состоит в том, что на лету создаем классик который печатает означенные от 1 до мульона, компилим его и тут же запускаем. Формально цикла в исходниках нет 
Добавлено через 2 минуты и 4 секунды Можно конечно и покруче навертеть. Создать класс через рефлексию схватить его метод и запустить и не маяться вызовом Runtime.exec() |