如何通过processBuilder运行可执行文件?

时间:2016-12-16 08:56:10

标签: java

我试图通过processBuilder运行带有linux选项的mencoder,但我只能从xterm运行它。当我试图直接运行它时,我在mencoder中遇到错误。 为了更好地解释,我有一个jtexfield,它显示mencoder的所有参数,以及输入和输出路径。这是可编辑的,我可以在那里更改一些参数。然后按"开始" button mencoder运行所有这些参数来转换文件。这很好用,使用xterm:

 String[] command= {"/usr/bin/xterm","-e",
 lblCommand.getText().toString()}; 
                try {
                    proc = new ProcessBuilder(command).start();
                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }

但我不想让外部终端运行。所以我试图直接运行mencoder并在jtextfield上显示输出。这也有效,但是mencoder并没有像以前一样工作。 如果我改为使用代码:

String command= {"/usr/bin/mencoder",lblCommand.getText().toString()}; 
                try {
                    proc = new ProcessBuilder(command).start();
                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }

然后我没有得到这样的目录错误文件:

  
    

java.io.IOException:无法运行程序" / usr / bin / mencoder -sub" /media/Data/input.srt" -subcp iso-8859-7 -spualign 2 -subpos 96     -subfont-text-scale 3.3 -vf pp = lb -ovc lavc -lavcopts vbitrate = 1200 -oac copy" /media/Data/input.avi" -o" /media/Data/dvd/test.avi"":error = 2,此处没有此类文件或目录     java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)at     burnsub.MainWindow $ 3.actionPerformed(MainWindow.java:190)at     javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)       在     javax.swing.AbstractButton中的$ Handler.actionPerformed(AbstractButton.java:2348)       在     javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)       在     javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)       在     javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)       在java.awt.Component.processMouseEvent(Component.java:6533)at     javax.swing.JComponent.processMouseEvent(JComponent.java:3324)at     java.awt.Component.processEvent(Component.java:6298)at     java.awt.Container.processEvent(Container.java:2236)at     java.awt.Component.dispatchEventImpl(Component.java:4889)at     java.awt.Container.dispatchEventImpl(Container.java:2294)at     java.awt.Component.dispatchEvent(Component.java:4711)at     java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)       在     java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)       at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)       在java.awt.Container.dispatchEventImpl(Container.java:2280)at     java.awt.Window.dispatchEventImpl(Window.java:2746)at     java.awt.Component.dispatchEvent(Component.java:4711)at     java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)at at     java.awt.EventQueue.access $ 500(EventQueue.java:97)at     java.awt.EventQueue $ 3.run(EventQueue.java:709)at     java.awt.EventQueue $ 3.run(EventQueue.java:703)at     java.security.AccessController.doPrivileged(Native Method)at     java.security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)       在     java.security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90)       在java.awt.EventQueue $ 4.run(EventQueue.java:731)at     java.awt.EventQueue $ 4.run(EventQueue.java:729)at     java.security.AccessController.doPrivileged(Native Method)at     java.security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)       在java.awt.EventQueue.dispatchEvent(EventQueue.java:728)at     java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)       在     java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)       在     java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)       在     java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)       在     java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)       at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)     引起:java.io.IOException:error = 2,没有这样的文件或目录     java.lang.UNIXProcess.forkAndExec(Native Method)at     java.lang.UNIXProcess。(UNIXProcess.java:247)at     java.lang.ProcessImpl.start(ProcessImpl.java:134)at     java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)......还有37个     线程中的异常" AWT-EventQueue-0"显示java.lang.NullPointerException       在burnsub.MainWindow $ 3.actionPerformed(MainWindow.java:195)at     javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)       在     javax.swing.AbstractButton中的$ Handler.actionPerformed(AbstractButton.java:2348)       在     javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)       在     javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)       在     javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)       在java.awt.Component.processMouseEvent(Component.java:6533)at     javax.swing.JComponent.processMouseEvent(JComponent.java:3324)at     java.awt.Component.processEvent(Component.java:6298)at     java.awt.Container.processEvent(Container.java:2236)at     java.awt.Component.dispatchEventImpl(Component.java:4889)at     java.awt.Container.dispatchEventImpl(Container.java:2294)at     java.awt.Component.dispatchEvent(Component.java:4711)at     java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)       在     java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)       at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)       在java.awt.Container.dispatchEventImpl(Container.java:2280)at     java.awt.Window.dispatchEventImpl(Window.java:2746)at     java.awt.Component.dispatchEvent(Component.java:4711)at     java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)at at     java.awt.EventQueue.access $ 500(EventQueue.java:97)at     java.awt.EventQueue $ 3.run(EventQueue.java:709)at     java.awt.EventQueue $ 3.run(EventQueue.java:703)at     java.security.AccessController.doPrivileged(Native Method)at     java.security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)       在     java.security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90)       在java.awt.EventQueue $ 4.run(EventQueue.java:731)at     java.awt.EventQueue $ 4.run(EventQueue.java:729)at     java.security.AccessController.doPrivileged(Native Method)at     java.security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)       在java.awt.EventQueue.dispatchEvent(EventQueue.java:728)at     java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)       在     java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)       在     java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)       在     java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)       在     java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)       在java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

  

还有其他方法可以实现这个目标吗?

0 个答案:

没有答案
相关问题