Форум программистов, компьютерный форум, киберфорум
Наши страницы
Java
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
alguein
0 / 0 / 0
Регистрация: 29.09.2016
Сообщений: 3
1

Запуск внешней программы на переднем плане

29.09.2016, 17:04. Просмотров 1147. Ответов 4
Метки нет (Все метки)

Здравствуйте.

Подскажите.
Вот такая заковырка заставила меня озадачиться...
Если вкратце, то есть клиент-северное приложение, которое, кроме прочего, сервером получает от клиента команды, которые выполняет на компьютере.
Банально. Вот набросок.

Сервер:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
        ServerSocket server = new ServerSocket(1616);
 
//        while (!server.isClosed()) {
            Socket client = server.accept();
 
            DataInputStream input = new DataInputStream(client.getInputStream());
            DataOutputStream output = new DataOutputStream(client.getOutputStream());
 
            Process process = Runtime.getRuntime().exec(input.readUTF());
//            process.waitFor();
            output.writeUTF("");
            output.flush();
 
            client.close();
//        }
 
        server.close();
Клиент:
Java
1
2
3
4
5
6
7
8
9
        Socket server = new Socket("localhost", 1616);
 
        DataInputStream input = new DataInputStream(server.getInputStream());
        DataOutputStream output = new DataOutputStream(server.getOutputStream());
 
        output.writeUTF("cmd.exe /C notepad");
        input.readUTF();
 
        server.close();
И проблема следующая...
Запускаемое приложение (например, notepad, пробовал и с "cmd.exe /C" и без этого - в моём случае никакой разницы), запускается неактивным где-то на фоне, позади, а надо, что бы оно запускалось перед пользователем, на переднем плане.
Причем...Данный пример запустит notepad и выведет его на передний план так, как и надо, НО если раскоментировать process.waitFor(), то приложение уже будет запускаться на заднем плане или, если убрать waitFor, но раскоментировать цикл, то по причине активации ожидания нового подключения server.accept() опять приложение будет запущено на заднем плане.
Что за беда такая? Как её решить?
Не могу понять, как положение окна запускаемого приложения связано с тем же server.accept() ? И как справиться с этой напастью? Что можно сделать?

Заранее вам спасибо. Надеюсь, что ясно изложил.

И да. Если запускать пример в какой-нибудь IDE, то всё всегда отработает так, как надо, а если тестировать уже на собранных jar файлах, то вот тут то проблема уже на лицо.

Еще раз спасибо. Голову сломал.

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.09.2016, 17:04
Ответы с готовыми решениями:

Запуск внешней программы с java приложения.
Возможно ли запустить из java приложения, например, фотошоп? Как?

Перехват стандартного вызова запущенной из ява-приложения внешней программы
Как перехватить стандартный вывод запущенной из ява-приложения внешней...

Запуск программы
Здравствуйте. Моя ситуация может показаться для многих смешной, но тем не...

Запуск программы на другом компьютере
Допустим я написал какую-то программу и хочу чтобы она запускалась на другом...

Запуск программы на Java (ошибка)
Здравствуйте. Понимаю что эта тема изъезженна вдоль и поперек, но я что-то...

4
miktim
8 / 8 / 11
Регистрация: 14.08.2016
Сообщений: 54
30.09.2016, 14:44 2
Запустите клиента на другой (виртуальной) машине. И будет вам счастье.

Добавлено через 14 минут
Нет, счастья не будет. Вспоминаю, как запустить win-приложение на переднем плане...
0
DevAlone
324 / 276 / 78
Регистрация: 02.08.2016
Сообщений: 1,008
Завершенные тесты: 4
30.09.2016, 14:57 3
Можно попробовать через winapi функции, только тогда будет уже не кросплатформа. тут вроде что-то похожее делают

Добавлено через 27 секунд
goo точка gl/Z9YT1X
0
miktim
8 / 8 / 11
Регистрация: 14.08.2016
Сообщений: 54
30.09.2016, 18:18 4
Призадуматься - странная тема... Ну, если надо, можно запускать команду на MS-сервере опосредованно через MS jscript.


Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// runOnTop.js
// usage: cscript /nologo [path]runOnTop.js "command"
//
try {
    var wsh = WScript.CreateObject("WScript.Shell");
    var retcode=0;
// Спросить и запустить.
// popup: [url]https://msdn.microsoft.com/en-us/library/x83z1d9f(v=vs.84).aspx[/url]
// run:   [url]https://msdn.microsoft.com/en-us/library/d5fk67ky(v=vs.84).aspx[/url]
    var btn = wsh.Popup("Выполнение команды: " + WScript.Arguments.item(0)+ "!"
        , 10, "Запрос удаленного клиента",0x0 + 0x40 + 0x1000); 
// 0x1000 system modal message box, что тоже не айс
    switch(btn) {
// Да. Запускается на переднем плане
      case 1:
         retcode = wsh.run(WScript.Arguments.item(0), 1, true);
         break;
// Таймаут. Запускается на заднем плане
      case -1:
         retcode = wsh.run(WScript.Arguments.item(0), 1, true);
         break;
    }
    if (retcode != 0 ) throw retcode;
} catch (err) {
    if (retcode == 0) retcode=10;
};
WScript.Quit(retcode);
Вызов может выглядеть так:
Java
1
2
Process process = Runtime.getRuntime().exec("cscript /nologo runOnTop.js \""
   + input.readUTF() + "\"");
0
alguein
0 / 0 / 0
Регистрация: 29.09.2016
Сообщений: 3
03.10.2016, 03:07  [ТС] 5
Через MS jscript тоже запускается где-то на фоне...
Причем, если в самом jscript выставить флаг ожидания завершения в false, то запускается на переднем плане, как и положено. Но ожидание необходимо.
Это чертовщина какая-то!
0
03.10.2016, 03:07
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.10.2016, 03:07

Компиляция и запуск программы в Sublime Text 3
Здравствуйте, уже много времени "хожу" по Интернету и ищу как запускать...

Открытие окна программы на переднем плане
Здравствуйте, помогите со скриптом . Нужно сделать, так чтобы программа...

Разместить фильтры на переднем плане
теперь такая проблема на сайте виджеты которые стоят посередине и должны...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru