如何将运行时输入从 qt creator 提供给外部 jar 文件
how to give runtime input from qt creator to external jar file
我搜索了这个主题,但找不到解决方案。
我正在将 qt widgets 应用程序开发到 运行 外部 jar 文件并在 qt gui touch diaplay 上显示 jar 输出。
以这种方式,我的外部 jar 文件在用户给定 运行 时间输入时执行,然后处理并打印输出。(读取和写入)
在这里,我使用 QProcess 执行了 jar 文件。进程(jar 执行)已启动 运行ning,正在等待用户输入。我无法通过 qt 控制台和终端 window 向我的外部 jar 文件提供 运行time 输入。请建议如何通过 qt 从外部 jar 文件写入输入和读取输出。
这是我们的 jar (sample.jar) 包含 java 应用程序文件 (.java)。将此 .java 文件导出为可执行 sample.jar 文件。
import java.util.Scanner;
public class RuntimeInput {
public static void main(String args[]){
System.out.println("Reading jar file");
System.out.println("Enter Consumer No: ");
Scanner inputReader = new Scanner(System.in);
String name = inputReader.nextLine();
System.out.println("Hi " + name);
```
}
}
预期的 Qt 输出:
运行 cmd 中的可执行 jar window 变成这样,
D:>java -jar sample.jar
正在读取 jar 文件
输入消费者编号:
124569896
你好 124569896
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QTextStream>
#include <QByteArray>
#include <QProcess>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
cmd = new QProcess(this);
connect( cmd, SIGNAL(readyReadStandardError()), this, SLOT(handleReadStandardError()) );
connect( cmd, SIGNAL(readyReadStandardOutput()), this, SLOT(handleReadStandardOutput()) );
QStringList arguments;
arguments << "-jar" << "D:\sample.jar";
cmd->start("java", arguments, QIODevice::ReadWrite);
//cmd->execute("java -jar D:\sample.jar");
if ( cmd->state() == QProcess::NotRunning ) {
qDebug() << "The process is not running.It exits";
}
else if ( cmd->state() == QProcess::Starting ) {
qDebug() << "The process is started, but the program has not yet been invoked.";
}else if ( cmd->state() == QProcess::Running ) {
qDebug() << "The process is running and is ready for reading and writing.";
}
if (!cmd->waitForStarted()) {
qDebug() << "Not yet started";
}
}
void MainWindow::handleReadStandardError()
{
QByteArray data = cmd->readAllStandardError();
qDebug() << data;
ui->textEdit->append(QString(data));
}
void MainWindow::handleReadStandardOutput()
{
QByteArray data = cmd->readAllStandardOutput();
qDebug() << "Data:\n" << data << endl;
ui->textEdit->append(QString(data));
}
QT 控制台输出:
启动 D:\ANNIE\QT Workspace\build-Samplewrite-Desktop_Qt_5_7_1_MinGW_32bit-Debug\debug\Samplewrite.exe...
进程运行ning,准备读写。
数据:
"正在读取 jar 文件 \r\n
输入消费者编号:\r\n"
我搜索了这个主题,但找不到解决方案。
我正在将 qt widgets 应用程序开发到 运行 外部 jar 文件并在 qt gui touch diaplay 上显示 jar 输出。 以这种方式,我的外部 jar 文件在用户给定 运行 时间输入时执行,然后处理并打印输出。(读取和写入) 在这里,我使用 QProcess 执行了 jar 文件。进程(jar 执行)已启动 运行ning,正在等待用户输入。我无法通过 qt 控制台和终端 window 向我的外部 jar 文件提供 运行time 输入。请建议如何通过 qt 从外部 jar 文件写入输入和读取输出。
这是我们的 jar (sample.jar) 包含 java 应用程序文件 (.java)。将此 .java 文件导出为可执行 sample.jar 文件。
import java.util.Scanner;
public class RuntimeInput {
public static void main(String args[]){
System.out.println("Reading jar file");
System.out.println("Enter Consumer No: ");
Scanner inputReader = new Scanner(System.in);
String name = inputReader.nextLine();
System.out.println("Hi " + name);
```
}
}
预期的 Qt 输出:
运行 cmd 中的可执行 jar window 变成这样,
D:>java -jar sample.jar
正在读取 jar 文件 输入消费者编号: 124569896 你好 124569896
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QTextStream>
#include <QByteArray>
#include <QProcess>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
cmd = new QProcess(this);
connect( cmd, SIGNAL(readyReadStandardError()), this, SLOT(handleReadStandardError()) );
connect( cmd, SIGNAL(readyReadStandardOutput()), this, SLOT(handleReadStandardOutput()) );
QStringList arguments;
arguments << "-jar" << "D:\sample.jar";
cmd->start("java", arguments, QIODevice::ReadWrite);
//cmd->execute("java -jar D:\sample.jar");
if ( cmd->state() == QProcess::NotRunning ) {
qDebug() << "The process is not running.It exits";
}
else if ( cmd->state() == QProcess::Starting ) {
qDebug() << "The process is started, but the program has not yet been invoked.";
}else if ( cmd->state() == QProcess::Running ) {
qDebug() << "The process is running and is ready for reading and writing.";
}
if (!cmd->waitForStarted()) {
qDebug() << "Not yet started";
}
}
void MainWindow::handleReadStandardError()
{
QByteArray data = cmd->readAllStandardError();
qDebug() << data;
ui->textEdit->append(QString(data));
}
void MainWindow::handleReadStandardOutput()
{
QByteArray data = cmd->readAllStandardOutput();
qDebug() << "Data:\n" << data << endl;
ui->textEdit->append(QString(data));
}
QT 控制台输出:
启动 D:\ANNIE\QT Workspace\build-Samplewrite-Desktop_Qt_5_7_1_MinGW_32bit-Debug\debug\Samplewrite.exe... 进程运行ning,准备读写。 数据:
"正在读取 jar 文件 \r\n 输入消费者编号:\r\n"