标签: program-flow

Java try-catch-finally中的奇怪错误

我正在使用JODConverter将.xls和.ppt转换为.pdf格式.为此,我有类似的代码

try{
    //do something
    System.out.println("connecting to open office");
    OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100);
    System.out.println("connection object created");
    connection.connect();
    System.out.println("connection to open office successful");
    //do something
    if(!successful)
      throw new FileNotFoundException();
}catch(Exception e){
   System.out.println("hello here");
   System.out.println("Caught Exception while converting to PDF ");
   LOGGER.error("Error in converting media" + e.getMessage());
   throw new MediaConversionFailedException();
}finally{
   decode_pdf.closePdfFile();
   System.out.println("coming in finally");
  //do something here
}
Run Code Online (Sandbox Code Playgroud)

我的输出:

connecting to open office
connection object created
coming in finally
Run Code Online (Sandbox Code Playgroud)

PS返回类型的方法是 void

这怎么可能 ?即使connection.connect()中存在一些问题,它也会进入catch块.困惑

java try-catch program-flow jodconverter

3
推荐指数
1
解决办法
534
查看次数

正确处理文件流和二进制流以及处理文件流

实际上,我尝试了对代码进行防错并最终使其看起来非常混乱.

我有一个功能设置来读取某种类型的文件.我希望函数在出现问题时返回false,如果一切正常则返回true.我无法弄清楚如何构建一切.

我有一个尝试打开文件流的初始try-catch块.在那之后,我在读取过程中进行了一些其他检查,例如文件大小和某些偏移处的值.我设置的方式是使用if else语句.如:

if(condition){

}
else{
    MessageBox.Show("There was an error");
    br.Dispose();
    fs.Dispose();
    return false;
}
Run Code Online (Sandbox Code Playgroud)

... br是二进制阅读器,fs是文件流.像这样有很多块,这么多次写同样的东西似乎是不好的做法.首先想到的是将整个事物包装在try-catch语句中并抛出异常而不是使用if else块.我记得在阅读try-catch语句时,拥有它们是好事,但不要用它们包装所有内容.说实话,我仍然不完全理解为什么在try catch语句中包装所有内容都是不好的做法,因为它们只有在出现错误时才会生效,在这种情况下程序正在向南移动...

此外,我是否必须关闭二进制阅读器和文件流,或者关闭一个关闭另一个?有没有办法使用它们而不必处理它们?

c# error-handling program-flow

3
推荐指数
1
解决办法
4695
查看次数

我该如何格式化这段代码?

以下是两种调用方式callscript(伪代码):

使用重复的电话

if flag == true
    flag = false
    callscript
    flag = true
else
    callscript
endif
Run Code Online (Sandbox Code Playgroud)

使用额外的变量

flag2 = flag
flag = false
callscript
flag = flag2
Run Code Online (Sandbox Code Playgroud)

条件

  • 我必须确保的是,flag就是false当脚本调用.
  • 此外,该flag值必须恢复为原始值.

有没有比这两个更好的方法呢?如果没有,哪一个是更好的选择?

language-agnostic program-flow

2
推荐指数
1
解决办法
64
查看次数

C中断程序流程

我有一个循环运行,每次迭代增加一个变量的值,我希望能够在键盘上按一个键来停止循环并报告变量的最终值.事情是,我无法弄清楚如何在C中做到这一点.我觉得很愚蠢,因为我似乎忽略了一些非常简单易行的方法,但我尝试的一切都会停止循环直到我按下一个键键盘,基本上与我想要的完全相反.

基本上我想要做的是这样的事情:

 
   while (key is not pressed)
increment value
print final value

那有意义吗?无论如何,有关如何在C中执行此操作的任何提示?

c keyboard program-flow

1
推荐指数
1
解决办法
2510
查看次数