Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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_Loops_Process_Instance - Fatal编程技术网

Java-实例化对象后卡住

Java-实例化对象后卡住,java,loops,process,instance,Java,Loops,Process,Instance,我有一个类,需要不时生成一个密钥,并与客户机和服务器共享 Kdc类: protected Kdc() { (do stuff) runKdc(); } private void runKdc(){ for(;;){ generateKey(); informClients(); informServers(); try { Thread.sleep(generationT

我有一个类,需要不时生成一个密钥,并与客户机和服务器共享

Kdc类:

    protected Kdc() {
    (do stuff)
    runKdc();
} 


private void runKdc(){
    for(;;){
        generateKey();
        informClients();
        informServers();
        try {
            Thread.sleep(generationTime);
        } catch (InterruptedException e) {
            System.out.println("Sleep Interrupted");
        }
    }
}
主要类别:

    public static void main(String[] args) {
    Kdc kdc = new Kdc();
    System.out.println("done"); //Doesn't reach the line
}
现在我的问题是,在启动Kdc类之后,我需要做一些事情,但我不能!由于无限循环,在启动Kdc类之后,它只是卡在主类中。 有什么想法吗


谢谢。

您应该在sperate线程中运行KDC。该线程将在后台运行,主方法将继续

对于这个循环:

while(true){
    //do something
}

比for(;){}循环好得多。将“true”替换为布尔变量,如“running”或“active”

您应该在高速线程中运行KDC。该线程将在后台运行,主方法将继续

对于这个循环:

while(true){
    //do something
}

比for(;){}循环好得多。将“true”替换为布尔变量,如“running”或“active”

在新线程中启动Kdc类,或创建计时器以执行
Kdc.runKdc()
。 您可以像下面的示例一样在新线程中创建实例,或者只在新线程中运行
runKdc()
的代码

public static void main(String[] args) 
{
    Thread keyGenerationThread= new Thread() 
    {
        @Override
        public void run() 
        {
            Kdc kdc = new Kdc();
        }
    };
    keyGenerationThread.start(); 
    System.out.println("done"); 
}

在新线程中启动Kdc类,或者创建一个计时器来执行
Kdc.runKdc()
。 您可以像下面的示例一样在新线程中创建实例,或者只在新线程中运行
runKdc()
的代码

public static void main(String[] args) 
{
    Thread keyGenerationThread= new Thread() 
    {
        @Override
        public void run() 
        {
            Kdc kdc = new Kdc();
        }
    };
    keyGenerationThread.start(); 
    System.out.println("done"); 
}

例如,正如其他人所说,您应该在自己的线程中创建Kdc

package com.testingarea;

class Kdc {

  public Kdc() {
    runKdc();
  }

  private void runKdc() {
    while(true) {
      System.out.println("Running kdc");
      try {
        Thread.sleep(5000);
      } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
    }
  }

}

class RunKdc implements Runnable {

  @Override
  public void run() {
    Kdc k = new Kdc();      
  }

}

public class TestThread {

  public static void main(String[] args) {
    new Thread(new RunKdc()).start();
    System.out.println("Kdc thread started");
  } 


}

例如,正如其他人所说,您应该在自己的线程中创建Kdc

package com.testingarea;

class Kdc {

  public Kdc() {
    runKdc();
  }

  private void runKdc() {
    while(true) {
      System.out.println("Running kdc");
      try {
        Thread.sleep(5000);
      } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
    }
  }

}

class RunKdc implements Runnable {

  @Override
  public void run() {
    Kdc k = new Kdc();      
  }

}

public class TestThread {

  public static void main(String[] args) {
    new Thread(new RunKdc()).start();
    System.out.println("Kdc thread started");
  } 


}

显示Kdc类的代码。。它是否在一个单独的线程中运行??。如果没有,那么您将使主线程在无限循环中休眠。(我认为您没有生成一个新线程来运行无限循环)在一个新线程中启动Kdc类,或者创建一个计时器来执行
Kdc.runKdc()
为什么要使用这个循环?永远不要使用这样的循环@零-他可以用它。但他必须使用新的线程。这样的循环很常见,否则您如何期望任务反复运行?请使用ScheduledExecutorService。并找到了解Java.show Kdc类代码的人。。它是否在一个单独的线程中运行??。如果没有,那么您将使主线程在无限循环中休眠。(我认为您没有生成一个新线程来运行无限循环)在一个新线程中启动Kdc类,或者创建一个计时器来执行
Kdc.runKdc()
为什么要使用这个循环?永远不要使用这样的循环@零-他可以用它。但他必须使用新的线程。这样的循环很常见,否则您如何期望任务反复运行?请使用ScheduledExecutorService。找一个懂Java的人,虽然我同意这一点
Kdc
constructor永远不会退出,这让我感觉不对。如果
Kdc
没有在其构造函数中调用
runKdc()
(或者如果线程在构造函数中被剥离),我更愿意这样做,而我确实同意这一点
Kdc
constructor永远不会退出,这让我感觉不对。如果
Kdc
没有在其构造函数中调用
runKdc()
(或者如果线程是在构造函数中分离出来的),我更愿意这样做,非常感谢!我尝试过线程,但我做了
new-Thread(new-RunKdc()).run()而不是.start()。再次感谢你!非常感谢你!我尝试过线程,但我做了
new-Thread(new-RunKdc()).run()而不是.start()。再次感谢你!