我遇到了用ProcessBuilder执行Windows程序的问题。下面的代码将生成一个命令数组,如:
C:\program files\gdal\bin\gdal\apps\gdalwarp.exe,-t_srs,epsg:32633,-et,1,-r,near,h:\geodata\raster\1m_wef30jan2020_wgs84ll_somlos_8.tif,h:\geodata\raster\result.tif
String [] cmd = {"C:\\Program Files\\Gdal\\bin\\gdal\\apps\\gdalwarp.exe",
"-t_srs", "EPSG:" + txtEPSG.getText(),
"-et", txtThreshold.getText().trim(),
"-r", cmbBoxResampl.getSelectedItem().toString(),
txtInFilename.getText(),
txtNewFilename.getText()
};
boolean r = Files.isExecutable(new File("C:\\Program Files\\Gdal\\bin\\gdal\\apps\\gdalwarp.exe").toPath());
java.lang.ProcessBuilder b = new java.lang.ProcessBuilder(cmd);
b.redirectError(ProcessBuilder.Redirect.INHERIT);
b.redirectInput(ProcessBuilder.Redirect.INHERIT);
Map<String,String> map = b.environment();
Process p = b.start();
int rc = p.waitFor();
if (p.exitValue() != 0) {
System.out.println(p.exitValue());
System.out.println("Command: " + cmd[0]);
InputStream errorStream = p.getErrorStream();
int c = 0;
while ((c = errorStream.read()) != -1) {
System.out.print((char)c);
}
}
当我调试Java程序时,我可以看到gdalwarp.exe是可执行的,并且环境设置与在cmd终端中执行gdalwarp.exe时相同。processBuilder似乎不执行GDalWarp。我得到的退出代码是-1073741511,它应该是0或-1。errorStream是空的,我没有得到任何打印。
当我在cmd终端中执行c:\program files\gdal\bin\gdal\apps\gdalwarp.exe-t_srs epsg:32633-et 1-r nearh:\geodata\raster\1m_wef30jan2020_wgs84ll_somlos_8.tif h:\geodata\raster\result.tif
时,我得到了有意义的输出和结果文件:h:\geodata\raster\result.tif。
我试过使用和不使用gdalwarp.exe的路径,但只有在cmd-terminal中才起作用。有什么想法吗?
当我使用ProcessBuilder执行cmd.exe时,我会得到一些有意义的输出。
在调用p.waitfor()
之前,请尝试读取输出:
List<String> results = readOutput(process.getInputStream());
并可能将结果打印出来进行检查。
我正在尝试限制关键字输入。 每当用户输入一个关键字,它就会在该关键字后面加上'span',例如。 如下面的html代码。 我可以限制字,但计数不准确,但当它达到5,它停止输入。 如果我刷新页面,我可以再输入一个,然后再阻止我一次。 奇怪的是,如果我为使用id就不起作用了。我得利用课堂。 我试过把,但不起作用,我必须保留它的资本。 jQuery: HTML:
问题内容: 注意:我正在使用virtualenvwrapper。 激活虚拟环境之前: 激活虚拟环境后: 问题答案: 您可能已经在系统上安装了lxml,可能是由于系统软件包而安装的。因此,第一次尝试(没有活动的virtualenv)不会失败,但是也不会安装它。它真的什么也没做。 在virtualenv中,默认情况下,系统软件包将被忽略。因此,pip认为未安装lxml。因此,它将尝试将其安装到您的虚拟
问题内容: 我正在学习Go,并且想尝试goroutine和频道。 这是我的代码: 结果如下: 我不明白为什么我的goroutine永远不会执行。没有输入“进入goroutine”,并且没有任何错误消息。 问题答案: 事实是您的goroutine开始执行,但是在执行任何操作之前就结束了,因为您的程序在打印后立即停止:goroutine的执行与主程序无关,但是将在与程序相同的位置处停止。因此,基本上,
问题内容: 3年前,我可以在express.js中进行多个res.send。 甚至编写setTimeout来显示实时输出。 现在它将抛出: 我知道nodejs和express已更新。为什么现在不能这样做?还有其他想法吗? 找到了解决方案,但API参考http://expressjs.com/4x/api.html中没有“ res.write” … :S 问题答案: 也许您需要: 隐式调用,后跟。如
首先,我发现了另外两条有类似问题的线索。问题在于,他们没有为字符串使用正确的等号,也没有为他们的特定问题正确设置if语句的格式。 在我的任务中,我需要创建一个名为“猪”的游戏,玩家与计算机对决,在掷骰子时先获得100分。如果玩家在一个回合中掷1,他们不会得到额外的分数。如果玩家掷两个1,那么他们将失去所有分数。我还没有对电脑的回合进行编码,只是专注于玩家。请告诉我我做错了什么。提前非常感谢。 我的
问题内容: 如果html文件是本地文件(在我的C驱动器上),则可以使用,但是如果html文件在服务器上并且图像文件是本地文件,则无法使用。这是为什么? 任何可能的解决方法? 问题答案: 如果客户端可以请求本地文件系统文件,然后使用JavaScript找出其中的内容,则将是一个安全漏洞。 解决此问题的唯一方法是在浏览器中构建扩展。Firefox扩展和IE扩展可以访问本地资源。Chrome的限制更为严