2014-01-12 2 views
0

Я хочу использовать CMD команд в Java программе,Как я могу использовать команду CMD в программе Java?

Хочет crope все изображения в папке, я downlaoded ImageMagick, и с помощью CMD команды Его рабочий 1 изображения,

cd C:\Users\Robert\Java-workspace\Crop_test\Crop_test1 
cd convert -crop 312x312+0-10 image1.jpg new_image1.jpg 

Но, я хочу использовать это в Java так, я могу обрезать все изображения в папке с помощью программы, Вот моя Java программа:

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 

import org.omg.CORBA.portable.OutputStream; 

public class test1 { 
    public static void main(String argv[]) throws IOException, InterruptedException { 

     ProcessBuilder pb = new ProcessBuilder("cmd", "/c", "C:\\Users\\Robert\\Java-workspace\\Crop_test\\Crop_test1\\", "convert -crop 312x312+0-10 image1.jpg new_image1.jpg"); 
     Process p = pb.start(); 
     p.waitFor(); 
    } 
} 
+0

Я подозреваю, что ' "преобразовать -crop 312x312 + 0-10 image1.jpg new_image1.jpg"' должны быть разделены параметры. Также кажется, что каталог не должен быть частью команды. Возможно, добавьте его позже, используя 'pb.directory (новый файл (« put path here »)) – Pshemo

+0

Как, ProcessBuilder pb = new ProcessBuilder (« cmd »,«/c »,« convert »,« -crop 312x312 + 0- 10 "," image1.jpg "," new_image1.jpg "); \t pb.directory (новый файл («C: \\ Users \\ Robert \\ Java-workspace \\ Crop_test \\ Crop_test1 \\")); Пожалуйста, помогите мне!!спасибо – user3187463

+0

Что-то в этом роде. Это работает? Если нет, возможно, попробуйте распечатать поток ошибок 'p' Process и поделиться какой ошибкой вы получите. – Pshemo

ответ

0

Вы можете вызывать команды CMD следующим образом в Java;

Runtime.getRuntime().exec(your_command); 

Лучше всего для вас сделать, это пакетный создающий файл с командами, которые необходимо выполнить, а затем вызовите пакетный файл с помощью следующей команды;

Runtime.getRuntime().exec("cmd /C start D:\\test.bat"); 

, потому что вы не можете выполнять никаких команд каталога изменений с использованием класса Runtime. Попробуйте этот вариант и дайте мне знать, если вы столкнетесь с какими-либо другими проблемами.

+3

Вы также можете использовать ProcessBuilder, и этот вопрос уже знает об этом. Этот ответ не помогает вообще. –

+0

Да, вы можете, но зачем добавлять сложность, когда вы можете достичь того же минимального кода? – dinukadev

+0

Большое вам спасибо за помощь, я попробовал то же самое! Пожалуйста, помогите мне спасибо! – user3187463

0

Пару вещей, чтобы попробовать (оба из которых являются непроверенные):

  1. Поместите cd в командной строке и использовать && для запуска обеих команд в одной строке.

    import java.io.BufferedReader; 
    import java.io.IOException; 
    import java.io.InputStreamReader; 
    
    import org.omg.CORBA.portable.OutputStream; 
    
    public class test1 { 
        public static void main(String argv[]) throws IOException, InterruptedException { 
    
         ProcessBuilder pb = new ProcessBuilder("cmd", "/c", "cd C:\\Users\\Robert\\Java-workspace\\Crop_test\\Crop_test1\\ && convert -crop 312x312+0-10 image1.jpg new_image1.jpg"); 
         pb.redirectErrorStream(true); 
         Process p = pb.start(); 
         p.waitFor(); 
        } 
    } 
    
  2. Изменить каталог, что ProcessBuilder начинается в:

    import java.io.BufferedReader; 
    import java.io.IOException; 
    import java.io.InputStreamReader; 
    
    import org.omg.CORBA.portable.OutputStream; 
    
    public class test1 { 
        public static void main(String argv[]) throws IOException, InterruptedException { 
    
         ProcessBuilder pb = new ProcessBuilder("cmd", "/c", "convert -crop 312x312+0-10 image1.jpg new_image1.jpg"); 
         pb.directory(new File("C:\\Users\\Robert\\Java-workspace\\Crop_test\\Crop_test1\\")); 
         pb.redirectErrorStream(true); 
         Process p = pb.start(); 
         p.waitFor(); 
        } 
    } 
    

Кстати, вы уверены, что вы хотите импортировать org.omg.CORBA.portable.OutputStream? Вы имели в виду java.io.OutputStream?

EDIT: Если все еще не работает, то следующим шагом будет выяснить, не является ли проблема, что convert не найден. Давайте просто запустим convert самостоятельно, без каких-либо аргументов и посмотрим, выплевывает ли оно его сообщение об использовании в стандартный вывод. Выполните следующие действия:

public class test1 { 
    public static void main(String argv[]) throws IOException, InterruptedException { 

     ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/c", "convert"); 
     pb.redirectErrorStream(true); 
     Process p = pb.start(); 
     StreamGobbler g = new StreamGobbler(p.getInputStream(), "OUT"); 
     g.start(); 
     p.waitFor(); 
    } 
} 

Используйте StreamGobbler class here. Выдает ли этот текст метод использования convert, с каждой строкой с префиксом OUT>?

+0

ohh ya java.io.OutputStream yap, Спасибо вам большое за вашу помощь, я пробовал, все еще не работаю !! Пожалуйста, помогите мне, спасибо! – user3187463

+0

@ пользователь3187463 'нерабочий' не очень описание проблемы. Что ты имеешь в виду? Вы получаете какие-либо ошибки? Он работает по-другому, что вы ожидали? Не влияет ли это на что-либо? – Pshemo

+0

Прошу прощения, я пробовал ваш код, его не давали мне никаких ошибок, но я проверяю папку, не конвертирую и не создаю новое изображение. Пожалуйста, помогите мне !! благодаря!! – user3187463

2

Хотя вы спрашиваете, как использовать CMD, и это было рассмотрено в других ответах, я считаю, что лучшим решением (с учетом вашего объяснения вашей реализации) было бы использовать оболочку ImageMagick для Java, как вы можете видеть here.

Приветствия

+0

Большое вам спасибо за помощь, ребята нашли решение! – user3187463

Смежные вопросы