用Java启动外部程序?

时间:2011-02-14 07:29:00

标签: java external-process audio-player

问题:在一定时间后自动关闭程序。

解决方案:以下是我解决问题的方法(与Ubuntu上的Rhythmbox配合使用):

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 个答案:

答案 0 :(得分:3)

你可能无法以这种方式启动EXE。我认为这是为了使用默认应用程序打开文件,而不是自己运行应用程序 - 或者您刚刚运行Windows安全性。

您可以使用Java.lang.Process运行带参数的程序。

答案 1 :(得分:1)

我不知道你怎么设置电台。但我想我可以告诉你如何打开媒体播放器: 我打了一个bat文件来更新我的ip地址,它对我来说很好。如果你设法调用.bat,那么你可以忘记java,并尝试启动播放器并从那里向他发送参数。

这就是java应该如何调用.bat:

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

这或多或少是.bat实现应该如下:

启动“”“%programfiles%\ Windows Media Player \ wmplayer.exe”

现在,您只需要了解默认情况下如何将媒体播放器设置为您想要的电台。

答案 2 :(得分:0)

Desktop.open()不用于运行可执行文件。您只是给它一个“数据文件”(例如mysong.mp3或myvideo.avi),然后它将使用系统的默认关联打开该文件。

如果你想运行.exe,请使用ProcessBuilder(搜索这个网站,过去几天有很多关于ProcessBuilder的问题)