2015-07-15 25 views
7

Daha önce derlenmiş kodu çalıştırmak istiyorum. Derledim, derlemem önemli değil, fakat kod çalıştırmak problem.Çalışma zamanında derlenmiş java kodunu çalıştıran

Benim

public class code{ 

    public static void main(String[] args) { 
     System.out.println("Hello, World"); 
    } 
} 

Sonra (D:// dizininde) bu kodu ve code.class derlenmiş code.java üretilmiştir. Şimdi bu derlenmiş dosyayı çalıştırmak istiyorum. Benim kodum:

import java.io.IOException; 
import java.io.InputStream; 

public class compiler { 
    public static void main(String[] args) { 
     final String dosCommand = "cmd /c java code"; 
     final String location = "D:\\"; 
     try { 
     final Process process = Runtime.getRuntime().exec(
      dosCommand + " " + location); 
     final InputStream in = process.getInputStream(); 
     int ch; 
     while((ch = in.read()) != -1) { 
      System.out.print((char)ch); 
     } 
     } catch (IOException e) { 
     e.printStackTrace(); 
     } 
    } 
} 

Burada bir hata yok, ancak bu kod hiçbir şey yapmıyor. Hayır, hiçbir şey açılmadı. Nerede yanlışım? Ne yapmalıyım?

+1

Önce ilk şeyler: 'Runtime.exec()' i kullanmayın, bir 'ProcessBuilder' kullanın. – fge

+0

İkincisi: Çalışmak istediğiniz kodun yakalamak istediğiniz çıktıyı oluşturduğuna; Bu durumda, bir komut yorumlayıcısında çalıştırmayın ... – fge

cevap

4

cmd sayfanızın yanlış olduğunu kontrol edin. Eğer farklı bir klasördeki bir Class dosyasını çalıştırmak ancak mevcut klasörde sınıf patikayı aslında yerinde

there is no error Hayır'ı belirten etmek -cp kullandığınızda

cmd /c java code D:/ /*this is not correct cmd command*/ 

o

cmd /c java -cp D:/ code 

olmalıdır. ama onları yakalamadınız. Hatalar yakalamak için

örnek kodunu kullanabilirsiniz

public class compiler { 

    public static void main(String[] args) { 
     final String dosCommand = "cmd /c java -cp "; 
     final String classname = "code"; 
     final String location = "D:\\"; 
     try { 
      final Process process = Runtime.getRuntime().exec(dosCommand + location + " " + classname); 
      final InputStream in = process.getInputStream(); 
      final InputStream in2 = process.getErrorStream(); 
      int ch, ch2; 
      while ((ch = in.read()) != -1) { 
       System.out.print((char) ch); 
      } 
      while ((ch2 = in2.read()) != -1) { 
       System.out.print((char) ch2); // read error here 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+1

Bu çalışır! Çok teşekkür ederim. –

+0

@ GürkanÇatak sınıf dosyasına iletebilirsiniz. Örneğin, 'code.class' öğesine merhaba demek istiyorsanız o zaman 'cmd/c java -cp D:/code hello'unu kullanabilirsiniz –

+0

Zaten çözdüm:) Teşekkür ederim. –

İlgili konular