Пакетный файл Windows интегрируется в графический интерфейс Java

1

Привет, я хотел бы интегрировать свой командный файл (stage.bat) в Java Gui, но я не знаю, как это сделать. Я упомянул эти два сайта:

Интеграция пакетного скрипта в Java GUI? и Как интегрировать пакетный сценарий с несколькими вариантами в JAVA GUI?

Однако эти ответы не очень помогают, и при запуске моих java-кодов возникают ошибки.

Это мой пакетный код (пример):

@echo off
setLocal Enabledelayedexpansion

for %%d in (D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
if exist %%d:\ (
    if exist %%d:\stages.bat (
        %%d:
        )
    )
)

@For /F "tokens=1,2,3 delims=/ " %%A in ('Date /t') do @( 
   Set Day=%%A
   Set Month=%%B
   Set Year=%%C
)

setlocal enableDelayedExpansion
set "baseName=Stage-%Year%%Month%%Day%-"
set "n=0"
:loop
set /a n+=1
if exist "%baseName%%n%.txt" goto :loop
rem type nul > "%baseName%%n%.txt"

SETLOCAL ENABLEDELAYEDEXPANSION 
:: remove variables starting $
FOR  /F "delims==" %%a In ('set $ 2^>Nul') DO SET "%%a="
SET sourcedir=%d%
SET "choicebet= 123456789abcdefghijklmnopqrstuvwxyz"
FOR /f "tokens=1*delims=[]" %%a IN (
  'dir /b /a-d "%sourcedir%\*.raw" ^|find /n /v ""'
  ) DO (
 SET $!choicebet:~%%a,1!=%%b
 SET /a choices=%%a+1
)
)
CALL SET choices=%%choicebet:~0,!choices!%%
IF DEFINED $2 (
 cls
 FOR /f "tokens=1*delims==" %%a IN ('set $') DO SET "choicemade=%%a : %%b"&ECHO(!choicemade:~1!
 choice /c %choices:~1% /M "You have MORE than 1 raw files. Please select one."
 REM SET /a choicemade=!errorlevel!-1
 CALL SET choicemade=$%%choicebet:~!errorlevel!,1%%
 ) ELSE (
 SET choicemade=$1
)
FOR /f "tokens=1*delims==" %%a IN ('set %choicemade%') DO SET choicemade=%%b

cls

setlocal enabledelayedexpansion
echo Please select your functions for %sourcedir%%choicemade%
echo.
echo 1. Stage1
echo 2. Stage2
echo 3. Stage3
echo 4. EndStage
echo 5. All
echo.

:getOptions
set /p "op=Type the number of the functions you need for analysis without spacing (e.g. 1,2,3): "

if not defined op ( 
   echo.
    echo Please enter a valid option
    goto getOptions
   )

cls

SET StartTime=%time%


for %%a in (%op%) do if %%a EQU 5 set op=1,2,3,4
for %%i in (%op%) do call :option-%%i 

echo.
echo Analysis Done
echo Start Time (HH:MM:SS.MS): %StartTime%
echo End Time (HH:MM:SS.MS):%time%
echo.

choice /c yn /m "Would you like to continue with the optional functions?"
if %errorlevel% equ 1 (
    SET StartTime2=%time%
    echo Time to start
    echo *** choose ***
    echo Start Time (HH:MM:SS.MS): %StartTime2%
    echo End Time (HH:MM:SS.MS):%time%
    pause
    exit
    )
 if %errorlevel% equ 2 (
    exit
   )

:option-1
echo Action made.
echo Better analysis to be done later.
echo Start %choicemade% soon >> %baseName%%n%.txt

exit /B

:option-2
echo Stage 2 done.
echo Recording %choicemade% soon >> %baseName%%n%.txt

exit /B

:option-3
echo harry potter maybe included in it
echo Ending %choicemade% soon >> %baseName%%n%.txt

exit /B

:option-4
 echo Bye bye
Echo End %choicemade% >> %baseName%%n%.txt
exit /B

Вот мой код Java (пример):

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JCheckBox;

import java.awt.Window.Type;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.io.IOException;

import javax.swing.JButton;

 public class GUI extends JFrame {
    private JPanel contentPane;

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

    private static String cmdLine = "";
    private static final String scriptFile = "stages.bat";

    public GUI() {
        setTitle("Raw Files");
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setBounds(100, 100, 450, 300);
            contentPane = new JPanel();
            contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
            setContentPane(contentPane);
            contentPane.setLayout(null);

        JCheckBox chckbxStage = new JCheckBox("STAGE1");
        chckbxStage.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {

                if(!cmdLine.contains("STAGE1"))
                     cmdLine += " STAGE1 ";
            }
        });
        chckbxStage.setBounds(45, 36, 97, 23);
        contentPane.add(chckbxStage);

        JCheckBox chckbxStage_1 = new JCheckBox("STAGE2");
        chckbxStage_1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {

                if(!cmdLine.contains("STAGE2"))
                     cmdLine += " STAGE2 ";
            }
        });
        chckbxStage_1.setBounds(45, 89, 97, 23);
        contentPane.add(chckbxStage_1);

        JCheckBox chckbxStage_2 = new JCheckBox("STAGE3");
        chckbxStage_2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {

                if(!cmdLine.contains("STAGE3"))
                     cmdLine += " STAGE3 ";
            }
        });
        chckbxStage_2.setBounds(253, 36, 97, 23);
        contentPane.add(chckbxStage_2);

        JCheckBox chckbxEndstage = new JCheckBox("ENDSTAGE");
        chckbxEndstage.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {

                if(!cmdLine.contains("ENDSTAGE"))
                     cmdLine += " ENDSTAGE ";
            }
        });
        chckbxEndstage.setBounds(253, 89, 97, 23);
        contentPane.add(chckbxEndstage);

        JCheckBox chckbxA = new JCheckBox("ALL");
        chckbxA.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {

                 cmdLine = "STAGE1 STAGE2 STAGE3 ENDSTAGE";
            }
        });
        chckbxA.setBounds(45, 142, 97, 23);
        contentPane.add(chckbxA);
        JButton btnOkay = new JButton("Okay");
        btnOkay.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {

                DetectDrive d = new DetectDrive();
                String DetectDrive = d.USBDetect();

                try {

                    String command = "cmd /c start " + DetectDrive+ "stages.bat";
                    Runtime.getRuntime().exec(scriptFile + cmdLine);
                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
            }
        });
        btnOkay.setBounds(323, 208, 89, 23);
        contentPane.add(btnOkay);

    }
}

Мне также хотелось бы, чтобы мой командный скрипт выполнялся как подпроцесс или в фоновом режиме в моем gui. Может ли кто-нибудь помочь мне, поскольку я все еще новичок в Java? благодаря

Редактировать:

Я не понимаю ошибок, потому что их так много:

java.io.IOException: Не удается запустить программу "stage.bat": Ошибка CreateProcess = 2. Система не может найти файл, указанный в java.lang.ProcessBuilder.start (Неизвестный источник) в java.lang.Runtime.exec (Неизвестный источник ) в java.lang.Runtime.exec (Неизвестный источник) в java.lang.Runtime.exec (Неизвестный источник) в GUI $ 7.actionPerformed(GUI.java:110) в javax.swing.AbstractButton.fireActionPerformed (Неизвестный источник) в javax.swing.AbstractButton $ Handler.actionPerformed (Неизвестный источник) в javax.swing.DefaultButtonModel.fireActionPerformed (Неизвестный источник) в javax.swing.DefaultButtonModel.setPressed (Неизвестный источник) в javax.swing.plaf.basic.BasicButtonListener.mouseReleased (Неизвестный источник) Неизвестный источник) в java.awt.Component.processMouseEvent (Неизвестный источник) в javax.swing.JComponent.processMouseEvent (Неизвестный источник) в java.awt.Component.processEvent (Неизвестный источник) в java.awt.Container.processEvent (Неизвестный источник ) в java.awt.Component.dispatchEventImpl (Неизвестный источник) в java.awt.Container.dispatchEventImpl(Unknown So urce) в java.awt.Component.dispatchEvent (Неизвестный источник) в java.awt.LightweightDispatcher.retargetMouseEvent (Неизвестный источник) в java.awt.LightweightDispatcher.processMouseEvent (Неизвестный источник) в java.awt.LightweightDispatcher.dispatchEvent (Неизвестный источник) в java.awt.Container.dispatchEventImpl (Неизвестный источник) в java.awt.Window.dispatchEventImpl (Неизвестный источник) в java.awt.Component.dispatchEvent (Неизвестный источник) в java.awt.EventQueue.dispatchEventImpl (Неизвестный источник) в java.awt.EventQueue.access $ 400 (Неизвестный источник) в java.awt.EventQueue $ 3.run (Неизвестный источник) в java.awt.EventQueue $ 3.run (Неизвестный источник) в java.security.AccessController.doPrivileged (собственный метод) в java.security.ProtectionDomain $ 1.doIntersectionPrivilege (Неизвестный источник) в java.security.ProtectionDomain $ 1.doIntersectionPrivilege (Неизвестный источник) в java.awt.EventQueue $ 4.run (Неизвестный источник) в java.awt.EventQueue $ 4.run (Неизвестный источник ) в java.security.AccessController.doPrivileged (собственный метод) в java.security. ProtectionDomain $ 1.doIntersectionPrivilege (Неизвестный источник) в java.awt.EventQueue.dispatchEvent (Неизвестный источник) в java.awt.EventDispatchThread.pumpOneEventForFilters (Неизвестный источник) в java.awt.EventDispatchThread.pumpEventsForFilter (Неизвестный источник) в java.awt.EventDispatchThread.pumpEventsForHierarchy (Неизвестный источник) в java.awt.EventDispatchThread.pumpEvents (Неизвестный источник) в java.awt.EventDispatchThread.pumpEvents (Неизвестный источник) в java.awt.EventDispatchThread.run (Неизвестный источник) Вызывается: java.io.IOException: CreateProcess error = 2, система не может найти файл, указанный в java.lang.ProcessImpl.create(Native Method) в java.lang.ProcessImpl. (Неизвестный источник) в java.lang.ProcessImpl.start (Неизвестный источник).. 41 еще

Кто-нибудь может помочь мне понять, что означают эти ошибки? Я очень ценю любую помощь, которую я могу получить. Спасибо.

  • 0
    что не так с вашим кодом? Вы получаете какие-либо ошибки?
  • 0
    @ThusithaThilinaDayaratne Я обновил свой вопрос с ошибками, с которыми я сталкиваюсь. Пожалуйста, посмотрите и спасибо за помощь.
Показать ещё 1 комментарий
Теги:
batch-file
user-interface

1 ответ

0

Я вижу 2 ошибки в вашем коде.

  1. вы устанавливаете "команду", но вы используете "scriptfile + cmdLine" для выполнения.

    Строковая команда = "cmd/c start" + DetectDrive+ "stage.bat"; Runtime.getRuntime(). Exec (scriptFile + cmdLine);

  2. Чтобы вызвать пакетный файл, вы должны сделать это следующим образом. Необходимо указать путь к пакетному файлу, если он не находится в текущем каталоге

    Строковая команда = "cmd/c start" + "c:\temp\hello.bat"; Runtime.getRuntime() Exec (команда).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню