我一直在尝试编写一个java程序,它使用该Runtime.getRuntime().exec()方法使用命令行来运行程序"tesseract"的实例.
一些背景,Tesseract是一个免费的开源程序,用于在图片上执行OCR(光学字符识别).它接收图片文件并输出文本文档.它是一个使用此命令运行的命令行程序
(从命令提示符shell中)
tesseract imageFilePath outFilePath [optional arguments]
Run Code Online (Sandbox Code Playgroud)
例:
tesseract "C:\Program Files (x86)\Tesseract-OCR\doc\eurotext.tif" "C:\Users\Dreadnought\Documents\TestingFolder\out"
Run Code Online (Sandbox Code Playgroud)
第一个参数调用tesseract程序,第二个参数是图像文件的绝对路径,最后一个参数是输出文件应该是什么的路径和名称.Tesseract只需要输出文件的名称,不需要扩展名.
在命令提示符下工作,这非常有效.但是,我想从java程序运行它并遇到一些错误.
我发现这个代码作为一个起点非常有用
public class Main
{
public static void main(String args[])
{
try
{
Runtime rt = Runtime.getRuntime();
String cmdString = "cmd /c dir";
System.out.println(cmdString);
Process pr = rt.exec(cmdString);
BufferedReader input = new BufferedReader(new InputStreamReader(
pr.getInputStream()));
String line = null;
while ((line = input.readLine()) != null)
{
System.out.println(line);
}
int exitVal = pr.waitFor();
System.out.println("Exited with error code " + exitVal);
}
catch (Exception …Run Code Online (Sandbox Code Playgroud) 我写了一个简单的程序,ping三个站点,然后对它们是否可访问做出反应.
我的问题是:我可以抑制系统("ping")的输出吗?我用C++编写了代码,因为我知道这种语言最好.目前,代码打开运行系统命令的ping.exe.如果我可以阻止输出显示,而它仍然是理想的ping.
我最终将在Windows服务中转换此程序,这就是为什么我要禁止命令行控制台窗口以及抑制ping输出.谢谢.
最近我一直在用C++编写一个程序来ping三个不同的网站,然后根据通过或失败,它会在再次尝试之前等待5分钟或30秒.
目前我一直在使用ctime库和以下函数来处理我的等待.但是,根据我的CPU仪表,这是一个不可接受的解决方案.
void wait (int seconds)
{
clock_t endwait;
endwait = clock () + seconds * CLOCKS_PER_SEC;
while (clock () < endwait) {}
}
Run Code Online (Sandbox Code Playgroud)
这个解决方案不可接受的原因是因为根据我的CPU仪表,程序在等待时运行在我CPU的48%到50%之间.我有一个Athlon 64 x2 1.2 GHz处理器.我的适度130线计划甚至不可能接近50%.
如何更好地编写我的等待函数,以便它只使用最少的资源?
目前我正在使用C++环境开展非常基本的游戏.这个游戏曾经是一个学校项目,但现在我完成了这个编程课程,我想扩展我的技能,并在这个旧任务上更加蓬勃发展.
我已经做了很多我很满意的改变.我已将所有数据集中到文件夹层次结构中,我已经获得了读取这些位置的代码.
然而,我的问题源于一个非常根本的缺陷,一直困扰着我.
为了访问我正在使用的图像数据,我使用了代码:
string imageLocation = "..\\DATA\\Images\\";
string bowImage = imageLocation + "bow.png";
Run Code Online (Sandbox Code Playgroud)
问题是,当玩家在游戏板上拿起一个项目时,我的代码应该使用代码:
hud.addLine("You picked up a " + (*itt)->name() + "!");
Run Code Online (Sandbox Code Playgroud)
打印到命令行,"你拿起一把弓!".但相反它显示"你选择了..\DATA\Images \!".
在集中我以前使用的数据之前:
name_(item_name.substr(0, item_name.find('.')))
Run Code Online (Sandbox Code Playgroud)
在我的Item类构造函数中将项目名称切割为bow或candle之类的东西.在我改变了数据结构的方式后,我意识到我必须改变我将名字砍成同样简单的'bow'或'candle'的方式.
我已经更改了上面的代码以反映我对数据结构的更改:
name_(item_name.substr(item_name.find("..\\DATA\\Images\\"), item_name.find(".png")))
Run Code Online (Sandbox Code Playgroud)
但不幸的是,正如我早些时候提到的那样,代码的更改并不像我计划的那样好.
所以现在我已经给出了我的问题的真正冗长的介绍,这是我的问题.
如何在两个不需要的部分之间提取字符串的中间部分?另外,作为目标的中间部分长度未知.
非常感谢你们给予的任何帮助.如果您需要更多信息,请询问; 我将非常乐意上传部分甚至整个代码以获得更多帮助.再次非常感谢你.
我是一个相当新的java程序员.我只有大约五周的经验,从零开始,如果它们与控制器类不在同一个文件夹中,我在使用Scene Builder中创建的javafx fxml文件正确加载时遇到问题.
我在用
Win7x64 running jre7x86 for this build
Eclipse Juno Service Release 1
Build id: 20120920-0800
jre version 1.7.0_07
javaFx version 2.2.1-b03
SceneBuilder version 1.0-b50
Run Code Online (Sandbox Code Playgroud)
我的场景加载器代码是
private static final String RESOURCE_PATH = "/resources/";
public static Stage buildStage(@SuppressWarnings("rawtypes") Class pClass,
String stageTitle, String resourceLocation)
{
Stage temp = new Stage();
Pane page = null;
try
{
page = FXMLLoader.load(pClass.getResource(RESOURCE_PATH + resourceLocation), null,
new JavaFXBuilderFactory());
}
catch (IOException e)
{
e.printStackTrace();
}
Scene scene = new Scene(page);
temp.setScene(scene);
temp.setTitle(stageTitle);
temp.setResizable(false); …Run Code Online (Sandbox Code Playgroud) 我试图通过我的foreach块重命名特定目录中的文件找不到任何文件.
#expected encountered filename = 3000 Miles To Graceland 2001.avi
$path = "D:\Media Holding\[UsaBit.com]_3000 Miles To Graceland 2001"
foreach($file in Get-ChildItem $path) {
"FOUND ITEM"
if (!$file.PSIsContainer) {
$fileName = $file.FullName -replace ("(\w.*?)([12]\d{3})", "$1 ($2)") -replace("\.", " ") -replace("\s{2,}", " ")
$fileExtension = $file.FullName -replace ("[^\.]*\.(\w{3,4})$", ".$1")
$fileName = $fileName + $fileExtension
Rename-Item -NewName $file $fileName
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是foreach永远不会进入.我可以通过我的调试消息"FOUND ITEM"永远不会在控制台中显示来证明这一点.
我试图跟随K. Brian Kelly的一个foreach的例子.但显然我在这里遗漏了一些东西.
我也试图根据foreach中的替换和重命名参数重命名文件而不是路径中找到的目录.我不确定这些是否也有效,如果更有经验的眼睛可以给它一次,我会很高兴并且让我知道我正在尝试的是否应该工作以及是否有更好的方法.
我想知道我在这里做错了什么.调用重置按钮时,第一个函数运行正常,但由于某种原因,第二个函数没有做任何事情.表单确实被重置但第二个警报永远不会弹出,警告类永远不会被删除.谢谢你的帮助!
$('#registration :reset').click(function() {
alert("reset was clicked");
$('#registration :text').each(function() {
if ($(this).hasclass('warn')) {
$(this).removeClass('warn');
}
if (!$(this).hasclass('texta')) {
$(this).addClass('texta');
}
alert("value");
});
});
Run Code Online (Sandbox Code Playgroud)