我试图通过processBuilder运行带有linux选项的mencoder,但我只能从xterm运行它 . 当我试图直接运行它时,我在mencoder中得到错误 . 为了更好地解释,我有一个jtexfield,它显示mencoder的所有参数,以及输入和输出路径 . 这是可编辑的,我可以在那里更改一些参数 . 然后按下“开始”按钮,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,没有这样的文件或目录at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)at burnsub.MainWindow $ 3.actionPerformed(MainWindow.java:190)at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)at javax.swing.AbstractButton $ Handler.actionPerformed(AbstractButton.java:2348)javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)at javax.swing.plaf.basic . BasicButtonListener.mouseReleased(BasicButtonListener.java:252)at java.awt.Component.processMouseEvent(Component.java:6533)at java.awt.Component.processEvent(Component,javax.swing.JComponent.processMouseEvent(JComponent.java:3324)的.java :7198)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)在java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)java.awt.LightweightDispatcher上 . dispatchEvent(Container.java:4466)位于java.awt.Compind上的java.awt.Container.dispatchEventImpl(Container.java:2280),java.awt.Component.dispatchEvent(Component.java)中的java.awt.Window.dispatchEventImpl(Window.java:2746) :4711)java.awt.EventQueue.access $ 700(EventQueue.java:97)java.awt.EventQueue $ 3.run(EventQueue.java:709)java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)在java.security.ProtectionDomain的java.security.AccessController.doPrivileged(Native Method)的java.awt.EventQueue $ 3.run(EventQueue.java:703)$ JavaSecurityAccessImpl.doIntersectionPrivilege(Protection Domain.java:80)java.security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90)at java.awt.EventQueue $ 4.run(EventQueue.java:731)at java.awt.EventQueue $ 4.run(EventQueue .java:729)位于java.security.ProtectionDomain的Java.security.AccessController.doPrivileged(Native Method),java.awt.EventQueue.dispatchEvent(EventQueue.java:728)中的javaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80) java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)在java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)在java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)在java.awt.EventDispatchThread位于java.awt.EventDispatchThread.run(EventDispatchThread.java:82)的java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)中的.pumpEvents(EventDispatchThread.java:101)引起:java.io.IOException:error = 2,java.lang.UNIXProc中没有这样的文件或目录java.lang.ProcessBuilder.start上的java.lang.ProcessImpl.start(ProcessImpl.java:134)中的java.lang.UNIXProcess . (UNIXProcess.java:247)中的ess.forkAndExec(本机方法)(ProcessBuilder.java:1029 )...更多线程“AWT-EventQueue-0”中的异常java.lang.NullPointerException at burnsub.MainWindow $ 3.actionPerformed(MainWindow.java:195)at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022) at javax.swing.AbstractButton $ Handler.actionPerformed(AbstractButton.java:2348)javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)at javax . swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)at java.awt.Component.processMouseEvent(Component.java:6533)at java.awt的javax.swing.JComponent.processMouseEvent(JComponent.java:3324) java.awt.Component.d的java.awt.Container.processEvent(Container.java:2236)中的.Component.processEvent(Component.java:6298)位于java.awt.Component.dispatchEvent(Component.java:4711)的java.awt.Container.dispatchEventImpl(Container.java:2294)中的ispatchEventImpl(Component.java:4889)at atjava.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)在java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)在java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)在java.awt.Container中.dispatchEventImpl(Container.java:2280)在java.awt.Window.dispatchEventImpl(Window.java:2746)在java.awt.Component.dispatchEvent(Component.java:4711)在java.awt.EventQueue.dispatchEventImpl(EventQueue中 . Java的:758)在java.awt.EventQueue.access $ 500(EventQueue.java:97)在java.awt.EventQueue中$ 3.run(EventQueue.java:709)在java.awt.EventQueue中$ 3.run(EventQueue.java: 703)在java.security.AccessController.doPrivileged(本机方法)在java.security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)在java.security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90)是java java.security.Acces的java.awt.EventQueue $ 4.run(EventQueue.java:729)中的.awt.EventQueue $ 4.run(EventQueue.java:731)位于java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread)的java.security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)中的sController.doPrivileged(Native Method)位于java.awt.EventQueue.dispatchEvent(EventQueue.java:728) . 的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.run中的java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)(EventDispatchThread.java:82)

有没有其他办法来实现这个目标?