Форум программистов, компьютерный форум, киберфорум
Наши страницы

Java

Войти
Регистрация
Восстановить пароль
 
alguein
0 / 0 / 0
Регистрация: 29.09.2016
Сообщений: 3
#1

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

29.09.2016, 17:04. Просмотров 996. Ответов 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
Возможно ли запустить из java приложения, например, фотошоп? Как?

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

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

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

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

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

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

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

Добавлено через 27 секунд
goo точка gl/Z9YT1X
0
miktim
8 / 8 / 3
Регистрация: 14.08.2016
Сообщений: 53
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
Привет! Вот еще темы с ответами:

Разместить фильтры на переднем плане - HTML, CSS
теперь такая проблема на сайте виджеты которые стоят посередине и должны прилипать к экрану почему то когда листаешь страницу стоят сзади...

Открыть папку на переднем плане - VBA
Здравствуйте! В форме по нажатию кнопки открывается папка но как сделать так, чтобы она поместилась на переднем плане? Shell...

Изображение на заднем плане, кнопка - на переднем - C# WPF
как зделать чтоб картинк ана заднем плане была а кнопка на переднем как Background="" только не цвет а картинка

Открыть текстовый файл на переднем плане - MS Access
Добрый день! Подскажите как можно открыть текстовый файл на переднем плане? Суть задачи в следующем: при добавлении данных в базу данных...


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

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

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