QBS >> Elementy standardowe >> Q-Run

Q-Run

Dokumentacja techniczna do programu Q-Run - startera aplikacji napisanych w Javie.

Opis działania

Program Q-Run służy do uruchamiania aplikacji napisanych w Javie.
W oparciu o plik konfiguracyjny wyświetla okno z tekstem i/lub grafiką, uruchamia aplikację i - gdy aplikacja przekaże odpowiedni komunikat - kończy swoje działanie.

Konfiguracja

Do konfigurowania programu Q-Run służy plik qrun.ini, który musi znajdować się w tym samym katalogu co qrun.exe. Struktura pliku jest następująca:

[sekcja1]
parametr1=wartosc1
...
parametrN=wartoscN

[sekcja2]
...

Opis dostępnych sekcji i parametrów każdej z nich zawiera poniższa tabelka:

sekcjaparametrznaczenietypwartość domyślna
run Path ścieżka do katalogu z uruchamianym programem string
Cmd nazwa uruchamianego pliku (opcjonalnie z parametrami) string
window Visible czy okno startera jest widoczne bool1
Title tekst w pasku tytułowym string
ShowTitle czy pasek tytułowy ma być widoczny bool1
Width szerokość okna w pikselach intszerokość obrazka
Height wysokość okna w pikselach intwysokość obrazka
image File ścieżka do pliku z grafiką; plik musi być w formacie BMP
uwaga - najlepiej, jeśli obrazek jest w 256 kolorach - wówczas zajmuje mniej oraz dobrze wyświetla się przy każdych ustawieniach ekranu użytkownika
string
Stretch czy grafika ma być rozciągana do rozmiaru okna bool0
text Text tekst wyświetlany w oknie startera string
FontSize rozmiar fontu int10
FontName nazwa fontu stringTimes New Roman
misc Delay czas w 1/1000s, przez jaki okno startera będzie wyświetlane, zanim nastąpi uruchomienie programu; przydatne do testowania int0

Opis typów:

Przykłady konfiguracji

W przykładach zostały wykorzystane następujące grafiki: bgr1.bmp i bgr4.bmp.

podglądzawartość pliku qrun.ini

tekst
[run]
Path=.
Cmd=1.3\bin\javaw.exe -cp classes Main3

[window]
ShowTitle=0
Width=450
Height=300

[text]
Text=\n\nProszę czekać...\n\nTrwa uruchamianie\nprogramu Q-Toraga
FontSize=24
FontName=Arial CE

grafika
[run]
Path=.
Cmd=1.3\bin\javaw.exe -cp classes Main3

[window]
Visible=1
ShowTitle=0
Width=450
Height=300

[image]
File=bgr4.bmp

grafika i tekst
[run]
Path=.
Cmd=1.3\bin\javaw.exe -cp classes Main3

[window]
ShowTitle=0

[image]
File=bgr1.bmp

[text]
Text=\n\nProszę czekać...\n\nTrwa uruchamianie\nprogramu Q-Toraga
FontSize=24
FontName=Arial CE

tekst i pasek tytułowy
[run]
Path=.
Cmd=1.3/bin/javaw.exe -cp classes Main3

[window]
Title=Uruchamianie programu Q-Toraga 3000 GJ
ShowTitle=1
Width=500
Height=170

[text]
Text=\nProszę czekać...
FontSize=30
FontName=Verdana

skalowana grafika
[run]
Path=.
Cmd=1.3/bin/javaw.exe -cp classes Main3

[window]
ShowTitle=0
Width=600
Height=200

[image]
File=bgr4.bmp
Stretch=1

Komunikacja z aplikacją

Komunikacja między starterem a aplikacją odbywa się poprzez standardowe wejście i wyjście. W chwili obecnej jest tylko jeden rodzaj komunikatu - gdy aplikacja chce poinformować starter, że może już zakończyć działanie, musi na standardowe wyjście wpisać dowolny string.

Dostosowanie aplikacji do współpracy ze starterem

Aby można było odpalać istniejącą już aplikację starterem Q-Run, trzeba w plikach Main.java i Start.java dokonać poprawek analogicznie do poniższego przykładu.

Main.java - przed zmianami
...
    public static void main(String args[]) throws Throwable
    {
        String ps = "".intern();
        if (args.length>0)
        {
            ps = args[0];
            qline.io.File f = new qline.io.File(ps);
            f.mkdirs();
        }
        if (logToFile)
        {
            PrintStream out = new PrintStream(
                new FileOutputStream(ps+"out.txt"));
            System.setOut(out);
            System.setErr(out);
        }
        try
        {
            new Start(ps);
        }
...
Main.java - po zmianach
...
    public static void main(String args[]) throws Throwable
    {
        String ps = "".intern();
        if (args.length>0)
        {
            ps = args[0];
            qline.io.File f = new qline.io.File(ps);
            f.mkdirs();
        }
        PrintStream oldout = System.out;
        if (logToFile)
        {
            PrintStream out = new PrintStream(
                new FileOutputStream(ps+"out.txt"));
            System.setOut(out);
            System.setErr(out);
        }
        try
        {
            new Start(ps, oldout);
        }
...

Start.java - przed zmianami
...
    public Start(String localPath)
    {
        app = new Application(localPath);
        registerUpdaters ();
        qline.qlicense.LicenseWindow.licenseon = false;
        app.readParams();
        app.getConfigHolder().getBaseTableHolder().writeSepStructFile();
        registerBaseNode() ;
        app.initParamsEngine();
...
Start.java - po zmianach
...
    public Start(String localPath)
    {
        this(localPath, null);
    }
    
    public Start(String localPath, java.io.PrintStream qrunout)
    {
        app = new Application(localPath);
        registerUpdaters ();
        qline.qlicense.LicenseWindow.licenseon = false;
        
        if (qrunout != null)
            qrunout.print('s');
        
        app.readParams();
        app.getConfigHolder().getBaseTableHolder().writeSepStructFile();
        registerBaseNode() ;
        app.initParamsEngine();
...