Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java进度条远程执行_Java_Remotecommand - Fatal编程技术网

Java进度条远程执行

Java进度条远程执行,java,remotecommand,Java,Remotecommand,我正在用java编写一个实用程序,它连接到linux机器并执行linux命令,然后显示结果。 下面是代码示例 try { Sch jsch=new JSch(); host=JOptionPane.showInputDialog("Enter username@hostname", System.getProperty("user.name")+"@localhost"); String user=host.substring(0,

我正在用java编写一个实用程序,它连接到linux机器并执行linux命令,然后显示结果。 下面是代码示例

try
{
 Sch jsch=new JSch();                   
 host=JOptionPane.showInputDialog("Enter username@hostname",       
 System.getProperty("user.name")+"@localhost"); 
 String user=host.substring(0, host.indexOf('@'));
 host=host.substring(host.indexOf('@')+1);
 session=jsch.getSession(user, host, 22);
 UserInfo ui=new MyUserInfo();
 session.setUserInfo(ui);
 session.connect();
 executor = (ChannelExec) session.openChannel("exec"); 
 executor.setCommand(command1);
 executor.connect();
 BufferedReader reader = new BufferedReader(new InputStreamReader  
 (executor.getInputStream())); 
 String line;
 StringBuilder sb = new StringBuilder();
 while((line= reader.readLine()) != null )
 {
   System.out.println(line);

}

    }

    catch (Exception exp){

    }
我已经做了所有的事情,但它只是在代码执行后显示进度条的更新。 我也使用了swing功能,但它只在代码运行后执行……我需要一些帮助来帮助我找到正确的路径
Vilas

JavaFx可用于具有丰富UI的进度条。我将给出一个带有进度条的布局示例

Stage myStage=new Stage(); 
GridPane rootNode = new GridPane();
Scene myScene = new Scene(rootNode, 700, 400);

//add a label username and Text field
rootNode.add(new Label("Username:"), 0, 0);
TextField uname = new TextField();
rootNode.add(uname, 1, 0);

//add a button
Button aButton = new Button("Submit");
rootNode.add(aButton, 1, 4);

myStage.setScene(myScene);
myStage.show();

aButton.setOnAction(new EventHandler<ActionEvent>() {
@Override
        public void handle(ActionEvent e) {
          //Do any simple things
          //Dont do complex things in button handle
          runtask();
        }
});

//runtask method
public void runtask(){
     //label for progress bar
     Label updateLabel = new Label("Processing...");
     ProgressBar progress = new ProgressBar();

     VBox updatePane = new VBox();
     updatePane.getChildren().addAll(updateLabel, progress);

     rootNode.add(updatePane,1,6);

     //create a task
     Task<Void> longTask = new Task<Void>() {
        @Override
        protected Void call() throws Exception {

                //do whatever u want
         }
     };
     longTask.setOnSucceeded(new EventHandler<WorkerStateEvent>() {
        @Override
        public void handle(WorkerStateEvent t) {
            //progressbar close when the task completes
            updatePane.setVisible(false);
        }
    });
    progress.progressProperty().bind(longTask.progressProperty());
    updateLabel.textProperty().bind(longTask.messageProperty());

    new Thread(longTask).start();

}
Stage myStage=newstage();
GridPane rootNode=新建GridPane();
scenemyscene=新场景(rootNode,700400);
//添加标签用户名和文本字段
添加(新标签(“用户名:”),0,0);
TextField uname=新的TextField();
添加(uname,1,0);
//添加一个按钮
按钮邻接=新按钮(“提交”);
添加(aButton,1,4);
myStage.setScene(myScene);
myStage.show();
aButton.setOnAction(有关更多信息,请参阅新的EventHandler)。

希望有帮助:-)

请查看下面的代码。我可以用一个不确定的程序来完成它,我想用一个进度条更新来完成它。请参见下面的代码

package com.vilas.isstexport;


import java.awt.Container;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.border.EmptyBorder;
import com.jcraft.jsch.ChannelExec;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.UIKeyboardInteractive;
import com.jcraft.jsch.UserInfo;
import javax.swing.BorderFactory;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JTextField;
import javax.swing.SwingWorker;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.awt.event.ActionEvent;
import javax.swing.JProgressBar;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.border.TitledBorder;
import java.awt.Component;

public class Dataexport extends JFrame {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private JPanel contentPane;
    private JTextField textField;
    private JButton btnExecute = new JButton("Execute");
    private JProgressBar progressBar = new JProgressBar();
    private JScrollPane scrollPane = new JScrollPane();
    private JTextArea textArea = new JTextArea();
    private BackgroundTask backgroundTask;
    private final JLabel statusLabel = new JLabel("Status: ", JLabel.CENTER);


     private final ActionListener buttonActions = new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
                JButton source = (JButton) ae.getSource();
                System.out.println(source.toString());
                if (source == btnExecute) {
                    textArea.setText(null);
                    btnExecute.setEnabled(false);
                    backgroundTask = new BackgroundTask();
                    backgroundTask.execute();
                    progressBar.setIndeterminate(true);
                } 
                /*else if (source == stopButton) {
                    backgroundTask.cancel(true);
                    backgroundTask.done();
                }*/
            }
        };
     private final JLabel lblProgressActivity = new JLabel("Progress Activity");


    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Dataexport frame = new Dataexport();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    public static class MyUserInfo implements UserInfo, UIKeyboardInteractive{
        public String getPassword(){ return passwd; }
        public boolean promptYesNo(String str){
          Object[] options={ "yes", "no" };
          int optionOutput=JOptionPane.showOptionDialog(null, 
                 str,
                 "Warning", 
                 JOptionPane.DEFAULT_OPTION, 
                 JOptionPane.WARNING_MESSAGE,
                 null, options, options[0]);
           return optionOutput==0;
        }

        String passwd;
        JTextField passwordField=(JTextField)new JPasswordField(20);

        public String getPassphrase(){ return null; }
        public boolean promptPassphrase(String message){ return true; }
        public boolean promptPassword(String message){
          Object[] ob={passwordField}; 
          int result=
            JOptionPane.showConfirmDialog(null, ob, message,
                                          JOptionPane.OK_CANCEL_OPTION);
          if(result==JOptionPane.OK_OPTION){
            passwd=passwordField.getText();
            return true;
          }
          else{ 
            return false; 
          }
        }
        public void showMessage(String message){
          JOptionPane.showMessageDialog(null, message);
        }
        final GridBagConstraints gbc = 
          new GridBagConstraints(0,0,1,1,1,1,
                                 GridBagConstraints.NORTHWEST,
                                 GridBagConstraints.NONE,
                                 new Insets(0,0,0,0),0,0);
        private Container panel;
        public String[] promptKeyboardInteractive(String destination,
                                                  String name,
                                                  String instruction,
                                                  String[] prompt,
                                                  boolean[] echo){
          panel = new JPanel();
          panel.setLayout(new GridBagLayout());

          gbc.weightx = 1.0;
          gbc.gridwidth = GridBagConstraints.REMAINDER;
          gbc.gridx = 0;
          panel.add(new JLabel(instruction), gbc);
          gbc.gridy++;

          gbc.gridwidth = GridBagConstraints.RELATIVE;

          JTextField[] texts=new JTextField[prompt.length];
          for(int i=0; i<prompt.length; i++){
            gbc.fill = GridBagConstraints.NONE;
            gbc.gridx = 0;
            gbc.weightx = 1;
            panel.add(new JLabel(prompt[i]),gbc);

            gbc.gridx = 1;
            gbc.fill = GridBagConstraints.HORIZONTAL;
            gbc.weighty = 1;
            if(echo[i]){
              texts[i]=new JTextField(20);
            }
            else{
              texts[i]=new JPasswordField(20);
            }
            panel.add(texts[i], gbc);
            gbc.gridy++;
          }

          if(JOptionPane.showConfirmDialog(null, panel, 
                                           destination+": "+name,
                                           JOptionPane.OK_CANCEL_OPTION,
                                           JOptionPane.QUESTION_MESSAGE)
             ==JOptionPane.OK_OPTION){
            String[] response=new String[prompt.length];
            for(int i=0; i<prompt.length; i++){
              response[i]=texts[i].getText();
            }
        return response;
          }
          else{
            return null;  // cancel
          }
        }
      }

    private class BackgroundTask extends SwingWorker<Integer, String> {

        private int status;

        public BackgroundTask() {
            System.out.println("state:: "+(this.getState()).toString());
            statusLabel.setText((this.getState()).toString());
        }

        @Override
        protected Integer doInBackground() {

            //String[] command = { "ls -lrt" };
            //String command = "ls -lrt";
            String command = textField.getText().toString();
            ChannelExec  exec = null;

            try {

                  JSch jsch=new JSch(); 
                  String host=null;


                    host=JOptionPane.showInputDialog("Enter username@hostname",
                                                     System.getProperty("user.name")+
                                                     "@localhost"); 

                  String user=host.substring(0, host.indexOf('@'));
                  host=host.substring(host.indexOf('@')+1);

                  Session session=jsch.getSession(user, host, 22);

               // username and password will be given via UserInfo interface.
                  UserInfo ui=new MyUserInfo();
                  session.setUserInfo(ui);
                  session.connect();
                  exec = (ChannelExec) session.openChannel("exec");
                  exec.setCommand(command);
                  exec.setInputStream(null);
                  exec.setErrStream(System.err);

                  exec.connect();


                String s;
                BufferedReader stdout = new BufferedReader(
                    new InputStreamReader(exec.getInputStream()));

                //System.out.println("s:: "+stdout.readLine());

                while ((s = stdout.readLine()) != null && !isCancelled()) {
                    //System.out.println("s:: "+s);
                    publish(s);
                }
                if (!isCancelled()) {
                    status = exec.getExitStatus();
                }
                exec.getInputStream().close();
                exec.getOutputStream().close();
               // exec.getErrorStream().close();
                //p.destroy();
                exec.disconnect();
                session.disconnect();
            } catch (IOException ex) {
                ex.printStackTrace(System.err);
            } catch (JSchException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            return status;
        }

        @Override
        protected void process(java.util.List<String> messages) {

            System.out.println("messages:: "+messages);
            statusLabel.setText((this.getState()).toString());
            for (String message : messages) {
                textArea.append(message + "\n");
            }
        }

        @Override
        protected void done() {
            statusLabel.setText((this.getState()).toString() + " " + status);
            //stopButton.setEnabled(false);
            btnExecute.setEnabled(true);
            progressBar.setIndeterminate(false);
        }

    }




    /**
     * Create the frame.
     */
    public Dataexport() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 761, 497);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);


        JPanel panel = new JPanel();
        panel.setAutoscrolls(true);
        GroupLayout gl_contentPane = new GroupLayout(contentPane);
        gl_contentPane.setHorizontalGroup(
            gl_contentPane.createParallelGroup(Alignment.LEADING)
                .addGroup(gl_contentPane.createSequentialGroup()
                    .addContainerGap()
                    .addComponent(panel, GroupLayout.DEFAULT_SIZE, 739, Short.MAX_VALUE))
        );
        gl_contentPane.setVerticalGroup(
            gl_contentPane.createParallelGroup(Alignment.LEADING)
                .addGroup(Alignment.TRAILING, gl_contentPane.createSequentialGroup()
                    .addContainerGap(44, Short.MAX_VALUE)
                    .addComponent(panel, GroupLayout.PREFERRED_SIZE, 431, GroupLayout.PREFERRED_SIZE)
                    .addContainerGap())
        );
        panel.setLayout(null);

        textField = new JTextField();
        textField.setBounds(232, 12, 114, 19);
        textField.setColumns(10);
        panel.add(textField);


        btnExecute.setBounds(232, 95, 114, 25);
        panel.add(btnExecute);
        btnExecute.addActionListener(buttonActions);





        progressBar.setEnabled(false);
        progressBar.setBounds(232, 51, 370, 14);
        panel.add(progressBar);
        scrollPane.setAlignmentY(Component.BOTTOM_ALIGNMENT);
        scrollPane.setAlignmentX(Component.RIGHT_ALIGNMENT);
        scrollPane.setViewportBorder(new TitledBorder(null, "", TitledBorder.LEADING, TitledBorder.TOP, null, null));

        scrollPane.setBounds(33, 163, 680, 240);
        panel.add(scrollPane);
        scrollPane.setBorder(BorderFactory.createTitledBorder("Output: "));
        scrollPane.setViewportView(textArea);

        JLabel lblEnterTheCommand = new JLabel("Enter the Command");
        lblEnterTheCommand.setBounds(33, 14, 152, 15);
        panel.add(lblEnterTheCommand);
        lblProgressActivity.setBounds(33, 51, 152, 15);

        panel.add(lblProgressActivity);
        contentPane.setLayout(gl_contentPane);
    }
}
package com.vilas.isstexport;
导入java.awt.Container;
导入java.awt.EventQueue;
导入java.awt.GridBagConstraints;
导入java.awt.GridBagLayout;
导入java.awt.Insets;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JOptionPane;
导入javax.swing.JPanel;
导入javax.swing.JPasswordField;
导入javax.swing.border.EmptyBorder;
导入com.jcraft.jsch.ChannelExec;
导入com.jcraft.jsch.jsch;
导入com.jcraft.jsch.JSchException;
导入com.jcraft.jsch.Session;
导入com.jcraft.jsch.UIKeyboardInteractive;
导入com.jcraft.jsch.UserInfo;
导入javax.swing.BorderFactory;
导入javax.swing.GroupLayout;
导入javax.swing.GroupLayout.Alignment;
导入javax.swing.JTextField;
导入javax.swing.SwingWorker;
导入javax.swing.JButton;
导入java.awt.event.ActionListener;
导入java.io.BufferedReader;
导入java.io.IOException;
导入java.io.InputStreamReader;
导入java.awt.event.ActionEvent;
导入javax.swing.JProgressBar;
导入javax.swing.JScrollPane;
导入javax.swing.JTextArea;
导入javax.swing.border.TitledBorder;
导入java.awt.Component;
公共类Dataexport扩展了JFrame{
/**
* 
*/
私有静态最终长serialVersionUID=1L;
私有JPanel内容窗格;
私有JTextField textField;
私有JButton btnExecute=新JButton(“执行”);
private JProgressBar progressBar=新的JProgressBar();
私有JScrollPane scrollPane=新JScrollPane();
私有JTextArea textArea=新JTextArea();
私人背景任务背景任务;
专用最终JLabel statusLabel=新JLabel(“状态:”,JLabel.CENTER);
私有最终ActionListener按钮操作=新建ActionListener(){
已执行的公共无效行动(行动事件ae){
JButton source=(JButton)ae.getSource();
System.out.println(source.toString());
如果(源==btnExecute){
textArea.setText(空);
btnExecute.setEnabled(false);
backgroundTask=新的backgroundTask();
backgroundTask.execute();
progressBar.SetUndeterminate(真);
} 
/*else if(source==停止按钮){
backgroundTask.cancel(true);
backgroundTask.done();
}*/
}
};
私人最终JLabel lblProgressActivity=新JLabel(“进度活动”);
/**
*启动应用程序。
*/
公共静态void main(字符串[]args){
invokeLater(新的Runnable(){
公开募捐{
试一试{
Dataexport帧=新的Dataexport();
frame.setVisible(true);
}捕获(例外e){
e、 printStackTrace();
}
}
});
}
公共静态类MyUserInfo实现UserInfo,UIKeyboardInteractive{
公共字符串getPassword(){return passwd;}
公共布尔promptYesNo(字符串str){
对象[]选项={“是”、“否”};
int optionOutput=JOptionPane.showOptionDialog(null,
str,
“警告”,
JOptionPane.DEFAULT_选项,
JOptionPane.WARNING_消息,
null,选项,选项[0]);
返回选项输出==0;
}
字符串密码;
JTextField passwordField=(JTextField)新的JPasswordField(20);
公共字符串getPassphrase(){return null;}
公共布尔提示密码短语(字符串消息){return true;}
公共布尔提示密码(字符串消息){
对象[]ob={passwordField};
整数结果=
JOptionPane.showConfirmDialog(null、ob、message、,
JOptionPane.OK\u CANCEL\u选项);
if(result==JOptionPane.OK\u选项){
passwd=passwordField.getText();
返回true;
}
否则{
返回false;
}
}
公共void showMessage(字符串消息){
showMessageDialog(空,消息);
}
最终GRIDBAG约束gbc=
新的网格约束(0,0,1,1,1,1,
格林巴奇,西北,
gridbag.NONE,
新插图(0,0,0,0),0,0);
私人货柜小组;
公共字符串[]promptKeyboardInteractive(字符串目标,
字符串名,
字符串指令,
字符串[]提示符,
布利亚