Java进度条远程执行
我正在用java编写一个实用程序,它连接到linux机器并执行linux命令,然后显示结果。 下面是代码示例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,
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功能,但它只在代码运行后执行……我需要一些帮助来帮助我找到正确的路径
VilasJavaFx可用于具有丰富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(字符串目标,
字符串名,
字符串指令,
字符串[]提示符,
布利亚