Запускать внешние программы с Java?

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

Решение: вот что я придумала, чтобы решить мою проблему (работает с Rhythmbox в Ubuntu):

package rhythmBox;

import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class closeRhythmBox extends JFrame implements ActionListener {

private static final long serialVersionUID = 1L;
private static final int WIDTH = 400;
private static final int HEIGHT = 300;
private JTextField minutesBox;

public static void main(String[] args) {
    new closeRhythmBox().setVisible(true);
}

public static void execKill(long minutes) throws InterruptedException {
    Thread.sleep(minutes*60*1000);
    try{
    Runtime.getRuntime().exec("pkill rhythmbox");
    System.exit(0);
        }
    catch (IOException ioe) {
          ioe.printStackTrace();
        }
}
public closeRhythmBox(){
    setTitle("Rythmbox Timer");
    setSize(WIDTH, HEIGHT);
    setVisible(true);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    Container pane = getContentPane();
    pane.setLayout(new FlowLayout());

    JPanel box = new JPanel();
    box.setLayout(new FlowLayout());
    JButton startButton = new JButton("Start");
    startButton.addActionListener(this);
    box.add(startButton);
    box.add(new JLabel("Minutes Until Close"));
    box.add(minutesBox = new JTextField(20));

    pane.add(box);
    pack();

}

public void actionPerformed(ActionEvent e) {
    String textNum = minutesBox.getText();
    long minuteNum = Long.parseLong(textNum);
    if (e.getActionCommand().equals("Start")){
        try {
            execKill(minuteNum);
        } catch (InterruptedException e1) {
            e1.printStackTrace();
        }
    }
}   

}

3 ответа

Решение

Понятия не имею, как ты мог установить радиостанцию. Но я думаю, что могу рассказать вам, как открыть медиаплеер: я однажды позвонил в bat-файл, чтобы обновить свой IP-адрес, и он у меня работал нормально. Если вам удастся вызвать.bat, то вы можете забыть о java, попробовать запустить плеер и отослать ему параметры оттуда.

Вот как Java должен называть.bat:

Runtime.getRuntime().exec("cmd /c start file.bat");

Это более или менее реализация.bat должна выглядеть так:

запустите "" "%programfiles%\Windows Media Player\wmplayer.exe"

Теперь вам нужно только узнать, как настроить медиаплеер для запуска на той станции, которую вы хотите, по умолчанию.

Вы, вероятно, не можете запустить EXE таким образом. Я думаю, что это было предназначено, чтобы открыть файл, используя приложение по умолчанию, а не запускать приложение самостоятельно - либо это, либо вы просто работаете в безопасности Windows.

Вы можете использовать Java.lang.Process для запуска программы с аргументами.

Desktop.open() не предназначен для запуска исполняемых файлов. Вы только что дали ему "файл данных" (например, mysong.mp3 или myvideo.avi), и он откроет этот файл с привязкой системы по умолчанию.

Если вы хотите запустить.exe, используйте ProcessBuilder (поищите этот сайт, в последние дни было много вопросов относительно ProcessBuilder)

Другие вопросы по тегам