1. NetBeans աշխատանքային միջավայրում ստեղծենք
ScriptRunner անունով պրոյեկտը և նրա լռելությամբ ստեղծված scriptrunner փաթեթում ավելացնենք JFrame դասից ժառանգված MainWindow անունով պատուհանը։ 2. Պատուհանի վրա ավելացնենք արտաքին սկրիպտի ճանապարհը նշելու, այն աշխատեցնելու և արդյունքներն արտածելու հետևյալ երեք օբյեկտները։
txtScript : JTextField- սկրիպտի կամ հրամանի ճանապարհը նշելու դաշտ,btnRun : JButton- աշխատանքը սկսելու կոճակ,areaResults : JTextArea- արդյունքներն արտածելու տիրույթ:
3. "Run" կոճակի կոնտեքստային մենյուից ընտրենք Events->Action->actionPerformed գործողությունը, որի հետևանքով պատուհանի կոդի հատվածում կստեղծվի
btnRunActionPerformed անունով մեթոդի դատարկ մարմինը։ Այս մեթոդը կանչվելու է, երբ սեղմենք "Run" կոճակը։
private void btnRunActionPerformed(java.awt.event.ActionEvent evt) {
//
}
Արտաքին ծրագիրն աշխատեցնում եմ
Process դասի օգնությամբ, որը հնարավորություն է տալիս իր getInputStream մեթոդից ստեղծել կարդալու հոսք և կարդալ արտաքին ծրագրի արտածման ու սխալների ստանդարտ հոսքերի արտածումները։ Օրինա, եթե պետք է Java ծրագրից աշխատեցնել ls ծրագիրը, ապա պետք է նախ ProcessBuilder դասի կոնստրուկտորին տալ աշխատեցվելիք ծրագրի անունը, ապա կանչելով նրա start մեթոդը, ստեղծել նոր պրոցես։
Process ps = (new ProcessBuilder("ls")).start();
InputStream is = ps.getInputStream();
Պրոցեսի տված հաղորդագրությունները սինխրոն կարդալու համար ստեղծել եմ մի thread, որը կարդում է պրոցեսի արտածման հոսքի հետ կապված ընթերցման հոսքի պարունակությունը և արտածում է areaResults դաշտում։Ահա
btnRunActionPerformed մեթոդի իրականացումը։
private void btnRunActionPerformed(java.awt.event.ActionEvent evt) {
try {
// պրոցեսի ստեղծում
ProcessBuilder pb = new ProcessBuilder(txtScript.getText());
// սխալների հոսքն ուղղել stdout-ի վրա
pb.redirectErrorStream(true);
// պրոցեսի գործարկում
Process procFlow = pb.start();
// վերցնել պրոցեսի արտածման հոսքը
InputStream inp = procFlow.getInputStream();
final BufferedReader reader =
new BufferedReader(new InputStreamReader(inp));
// thread-ի ստեղծում
Thread outputThread = new Thread() {
@Override
public void run()
{
try {
// ապահովել reader-ը,
synchronized(reader) {
String text = "";
// քանի դեռ կարդալու բան կա, կարդալ
while(null != (text = reader.readLine())) {
// տեքստը կցել areaResults-ի պարունակության պոչից
areaResults.append(text + "\n");
// կուրսորը տեղափոխել տեքստի վերջը
areaResults.setCaretPosition(areaResults.getText().length());
}
}
}
catch (Exception e) {}
}
};
// կարդացող thread-ի գործարկում
outputThread.start();
}
catch(IOException ex) {
JOptionPane.showMessageDialog(this, ex.getMessage(),
"Error", JOptionPane.ERROR_MESSAGE);
}
}
#!/bin/bash for m in 1 2 3 4 5 6 7 8 9 10 11 12 do echo Message number: $m sleep 2 doneԾրագիրն աշխատեցնելուց հետո
txtScript դաշտում ներմուում եմ սկրիպտի ճանապարհը ու սեղմում եմ Run կոճակը։ Արդյունքն այն է, ինչ ես սպասում էի։


No comments:
Post a Comment