জাভা প্রোগ্রামিং: জাভা এবং উত্তরণ পরামিতি থেকে একটি এক্সিকে কল করুন


87

আমি জাভা থেকে একটি এক্সিকে কল করতে এবং নির্দিষ্ট পরামিতিতে পাস করার জন্য একটি পদ্ধতি আবিষ্কার করছি uring আমি কিভাবে করব?

Process process = new ProcessBuilder("C:\\PathToExe\\MyExe.exe").start();
InputStream is = process.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;

System.out.printf("Output of running %s is:", Arrays.toString(args));

while ((line = br.readLine()) != null) {
  System.out.println(line);
}

পূর্ববর্তী কোড কাজ করে। তবে আমি প্যারামিটারগুলি পাস করতে সক্ষম নই । MyExe.exe পরামিতি গ্রহণ করে। অন্য একটি সমস্যা হ'ল পাথটোএক্সির ফাঁকা জায়গা থাকে। প্রসেসবিল্ডার কাজ করছে না বলে মনে হচ্ছে। উদাহরণ স্বরূপ:

C:\\User\\My applications\\MyExe.exe

ধন্যবাদ.


4
নতুন প্রসেসবিল্ডার ("সি: \\ পাথটক্সেক্স \\ মাইএক্সে.এক্সই", "প্যারাম 1", "প্যারাম 2") শুরু করুন ();
প্রিন্স জন ওয়েসলি


4
new ProcessBuilder("C:\\PathToExe\\MyExe.exe","param1","param2").start();এই স্নিপেট বিকল্প আর্গুমেন্ট জন্য মূল্যবান? উদাহরণস্বরূপ - এই যে সাহায্যের জন্য দাঁড়িয়েছে এবং এইরকম ..
লরেঞ্জো বি

ফাঁকা ফাঁকা জায়গাগুলি নিয়ে কী হবে? আবার আপনাকে ধন্যবাদ. খুব উপকারী!!
লরেঞ্জো বি

4
@ ফ্লেক্স: একটি যুক্তি একটি যুক্তি। অর্থ যুক্তি সম্পূর্ণভাবে আপ প্রোগ্রাম হচ্ছে রান হয়। একটি প্রোগ্রাম -hএকটি বিকল্প হিসাবে ব্যাখ্যা করতে পারে, অন্য একটি ফাইলের নাম হিসাবে এটি ব্যাখ্যা করতে পারে। ProcessBuilderনা জানে না যত্নও করে না। স্পেস সহ পুনরায় পথ: কমান্ড-লাইনে এবং কিছু দুর্বল এপিআই-তে একটি স্থান-বিস্মৃত তালিকা হিসাবে বলা (বলার চেয়ে) যুক্তিগুলিকে আলাদা স্ট্রিং হিসাবে যুক্ত করার কারণগুলির মধ্যে একটি। সেখানে পরিত্যক্ত হয়ে স্পেস ফেলে দিন, পুরো প্রোগ্রামের পথটি ওএসকে যথাযথ হিসাবে বিবেচনা করার জন্য দেওয়া হবে।
টিজে ক্রাউডার

উত্তর:


120

আপনার যুক্তিগুলি নির্মাণকারীর মধ্যেই পাস করুন Pass

Process process = new ProcessBuilder("C:\\PathToExe\\MyExe.exe","param1","param2").start();

এক্সিকিউটেবল জার ফাইলের মধ্যে থাকলে কী হবে?
t4d_

@ গুয়েস দয়া করে সমাধান করতে সাহায্য stackoverflow.com/questions/43050217/...
gstackoverflow

8

আপনি সঠিক পথে আছেন দুই কনস্ট্রাকটর আর্গুমেন্ট গ্রহণ, বা আপনার সাথে করে পোস্ট-নির্মাণ নির্দিষ্ট করতে পারেন ProcessBuilder#command(java.util.List)এবং ProcessBuilder#command(String...)


স্পষ্টকরণের জন্য: ProcessBuilder#command(java.util.List)এবং ProcessBuilder#command(String...)কনস্ট্রাক্টরের মাধ্যমে নির্দিষ্ট যে কোনও বিদ্যমান কমান্ড owwrit (ইমো যা ডক্স থেকে খুব পরিষ্কার নয়)।
স্নোজলবার্ট

0
import java.io.IOException;
import java.lang.ProcessBuilder;

public class handlingexe {
    public static void main(String[] args) throws IOException {
        ProcessBuilder p = new ProcessBuilder();
        System.out.println("Started EXE");
        p.command("C:\\Users\\AppData\\Local\\Google\\Chrome\\Application\\chrome.exe");   

        p.start();
        System.out.println("Started EXE"); 
    }
}

4
আরগস কোথায় রাখব?
Mert Serimer

4
@ শিখা দয়া করে এই প্রশ্নটি দেখুন
আনন্দ জে। কধি

0

নীচে আমার জন্য কাজ করে যদি আপনার এক্সি কিছু dll বা নির্দিষ্ট নির্ভরতার উপর নির্ভর করে তবে আপনাকে ডিরেক্টরি পথ নির্ধারণ করতে হবে। উদাহরণস্বরূপ নীচে যেমন এক্সপেট মানে ফোল্ডারটি রয়েছে যেখানে এটির সাথে রেফারেন্স ফাইল রয়েছে exe

অ্যাপ্লিকেশনটি কোনও অস্থায়ী ফাইল তৈরি করে যাতে এটি প্রক্রিয়া বিল্ডার.ডাইরেক্টরিতে ফোল্ডার উল্লেখ তৈরি করে (এক্স ...)

**

ProcessBuilder processBuilder = new ProcessBuilder(arguments);
processBuilder.redirectOutput(Redirect.PIPE);
processBuilder.directory(new File(exePath));
process = processBuilder.start();
int waitFlag = process.waitFor();// Wait to finish application execution.
if (waitFlag == 0) {
...
 int returnVal = process.exitValue();
} 

**

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.