Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 推迟例外_Java_Exception - Fatal编程技术网

Java 推迟例外

Java 推迟例外,java,exception,Java,Exception,我有一种定期的方法,例如每10秒尝试一次连接到服务器并从中读取一些数据。服务器可能并非始终可用。如果服务器不可用,该方法将引发异常 除了服务器至少一分钟不可用外,实现不引发异常的包装器方法的最佳方法是什么?跟踪上次成功到达服务器的时间。如果服务器抛出异常,请捕获它并与上次到达服务器的时间进行比较。如果该时间超过一分钟,请重新显示异常。跟踪上次成功到达服务器的时间。如果服务器抛出异常,请捕获它并与上次到达服务器的时间进行比较。如果时间超过一分钟,请重新显示异常。您必须记录最初尝试连接到服务器的时间

我有一种定期的方法,例如每10秒尝试一次连接到服务器并从中读取一些数据。服务器可能并非始终可用。如果服务器不可用,该方法将引发异常


除了服务器至少一分钟不可用外,实现不引发异常的包装器方法的最佳方法是什么?

跟踪上次成功到达服务器的时间。如果服务器抛出异常,请捕获它并与上次到达服务器的时间进行比较。如果该时间超过一分钟,请重新显示异常。

跟踪上次成功到达服务器的时间。如果服务器抛出异常,请捕获它并与上次到达服务器的时间进行比较。如果时间超过一分钟,请重新显示异常。

您必须记录最初尝试连接到服务器的时间,然后捕获异常。如果捕获异常的时间超过原始时间+1分钟,请重新播放异常。如果没有,请重试。

您必须记录最初尝试连接到服务器的时间,然后捕获异常。如果捕获异常的时间超过原始时间+1分钟,请重新播放异常。如果没有,请重试。

理想情况下,您可以在对服务器的呼叫上设置一个超时。如果失败,请在catch块中执行thread.sleep600,然后重试,如果第二个线程没有返回,则会失败。

理想情况下,您可以在对服务器的调用上设置一个超时。如果失败,请在catch块中执行thread.sleep600并重试,如果第二个线程没有返回,则会失败。

在伪代码中

//Create Timer
//Start Timer
bool connected = false;

while (!connected)

    try {
        //Connect To DB

        connected = true;
    }
    catch (Exception ex) {
       if (more than 1 minute has passed)
          throw new Exception(ex);
    }

}
在伪代码中

//Create Timer
//Start Timer
bool connected = false;

while (!connected)

    try {
        //Connect To DB

        connected = true;
    }
    catch (Exception ex) {
       if (more than 1 minute has passed)
          throw new Exception(ex);
    }

}

您可以有一个重试计数,如果您的案例中达到了所需的计数6,则抛出一个异常

int count = 0;

CheckServer(count);

public void CheckServer(count) {
try
{
  // connect to server
}
catch(Exception e)
{
 if(count < MAX_ATTEMPTS) {
    // wait 10 seconds
    CheckServer(count++)
  }
  else {
    throw e;
  }
}
}

您可以有一个重试计数,如果您的案例中达到了所需的计数6,则抛出一个异常

int count = 0;

CheckServer(count);

public void CheckServer(count) {
try
{
  // connect to server
}
catch(Exception e)
{
 if(count < MAX_ATTEMPTS) {
    // wait 10 seconds
    CheckServer(count++)
  }
  else {
    throw e;
  }
}
}

您可以为服务器连接是否成功设置一个布尔变量,并在异常处理程序中检查它,如下所示:

class ServerTester : public Object
{
  private bool failing;
  private ServerConnection serverConnection;
  private Time firstFailure;

  public ServerTester(): failing(false)
  {
  }

  public void TestServer() throws ServerException
  {
    try
    {
       serverConnection.Connect();
       failing = false;
    }
    catch (ServerException e)
    {
      if (failing)
      {
        if (Time::GetTime() - firstFailure > 60)
        {
          failing = false;
          throw e;
        }
      }
      else
      {
        firstFailure = Time::GetTime();
        failing = true;
      }
    }
  }
}

我不知道API的实际时间是多少,因为我上次使用Java已经有一段时间了。这会满足你的要求,但似乎有点不对劲。对异常的轮询给我的印象有点倒退,但由于您处理的是服务器,我想不出任何其他方法。

您可以为服务器连接是否成功设置一个布尔变量,并在异常处理程序中检查它,如下所示:

class ServerTester : public Object
{
  private bool failing;
  private ServerConnection serverConnection;
  private Time firstFailure;

  public ServerTester(): failing(false)
  {
  }

  public void TestServer() throws ServerException
  {
    try
    {
       serverConnection.Connect();
       failing = false;
    }
    catch (ServerException e)
    {
      if (failing)
      {
        if (Time::GetTime() - firstFailure > 60)
        {
          failing = false;
          throw e;
        }
      }
      else
      {
        firstFailure = Time::GetTime();
        failing = true;
      }
    }
  }
}

我不知道API的实际时间是多少,因为我上次使用Java已经有一段时间了。这会满足你的要求,但似乎有点不对劲。对异常的轮询给我的印象是有点倒退,但由于您处理的是服务器,我想不出任何其他方法。

请记住,异常处理只是普通返回系统的一种非常专门的用途。有关更多技术细节,请阅读monads。如果您想要发出信号的异常情况不适合Java的异常处理系统,那么使用异常可能是不合适的


您可以用通常的方法跟踪错误情况:保留一个状态变量,根据需要使用成功/失败信息对其进行更新,并在状态更改时做出适当的响应。

请记住,异常处理只是通常返回系统的一种非常专门的用途。有关更多技术细节,请阅读monads。如果您想要发出信号的异常情况不适合Java的异常处理系统,那么使用异常可能是不合适的


您可以用通常的方法跟踪错误情况:保留一个状态变量,根据需要使用成功/失败信息对其进行更新,并在状态更改时做出适当响应。

服务器实际上不会引发异常,引发异常的是客户机代码;然而,我仍然对你的答案投了+1票;然而,我仍然对你的答案投了+1票。