2015-10-28 5 views
0

Добрый вечер, я получил эти две программы здесьЗапуск программы Java с резьбой

httpServer.java

import java.io.IOException; 
import java.io.OutputStream; 
import java.net.InetSocketAddress; 
import java.util.concurrent.atomic.AtomicInteger; 

import com.sun.net.httpserver.HttpExchange; 
import com.sun.net.httpserver.HttpHandler; 
import com.sun.net.httpserver.HttpServer; 

public class httpServer extends Thread { 



public static void main(String[] args) throws Exception { 
    HttpServer server = HttpServer.create(new InetSocketAddress(8000), 0); 
    server.createContext("/test", new MyHandler()); 
    server.setExecutor(null); // creates a default executor 
    server.start(); 


} 

static class MyHandler implements HttpHandler { 
    AtomicInteger atomicInteger = new AtomicInteger(0); 
    int theValue = atomicInteger.get(); 
    @Override 
    public void handle(final HttpExchange t) throws IOException { 
     final String response; 

     final String requestMethod = t.getRequestMethod(); 
     if ("GET".equals(requestMethod)) { 
      response = String.format("Besuche: %d%n", atomicInteger.addAndGet(1)); 
     } 
     else if ("POST".equals(requestMethod)) { 
      atomicInteger.set(0); 

      response = "Reset to 0"; 
     } 
     else { 
      throw new IOException("Unsupported method"); 
     } 

     t.sendResponseHeaders(200, response.length()); 
     final OutputStream os = t.getResponseBody(); 
     os.write(response.getBytes()); 
     os.close(); 
    } 
} 



} 

Test.java

public class Test { 
public static void main(String[] args) { 
    System.out.println("Hello World!"); 
} 
} 

Теперь я хочу, чтобы Test.java начнет работать, когда я запустил httpServer.java. Я хочу достичь этого с помощью ниток. Я нашел это here онлайн, который expalins, как я делаю нить, но я не знаю, как заставить Test.java работать там.

Примечание: Я знаю, что могу писать как в одной программе, но я хочу знать, как работать с потоками для другого проекта, над которым я работаю.

+0

Я не уверен, что вопрос ... вы могли бы быть более ясным? «Я хочу, чтобы Test.java начал работать, когда я запускаю httpServer.java» (sic) - что? Вы имеете в виду, что вы запускаете 'java httpServer' и какой бы код не использовался в тестовых прогонах? –

+0

Да, точно, если httpServer запущен, код в Test также должен быть выполнен –

+3

Затем просто вызовите 'Test.main (<необязательные параметры>);'. Хотя это не имеет ничего общего с нитями, и вы, скорее всего, неправильно поняли что-то. – Kayaman

ответ

1

Для того чтобы начать обсуждение, вам необходимо ввести run -Method. Все внутри run -Method будет выполнено в новой теме.

Вы не реализовали метод запуска, поэтому вызов server.start(); ничего не делает. С run -метода это будет выглядеть следующим образом:

public class httpServer extends Thread 
{ 
    //Everything inside this method is executed in a new Thread 
    @Override 
    public void run() 
    { 
     super.run(); 

     System.out.println("THIS IS EXECUTED IN A THREAD"); 

     this.serverStuff(); 
    } 

    private void serverStuff() 
    { 
     HttpServer server = HttpServer.create(new InetSocketAddress(8000), 0); 
     server.createContext("/test", new MyHandler()); 
     server.setExecutor(null); // creates a default executor 
    } 
} 

public class Test 
{ 
    public static void main(String[] args) 
    { 
     System.out.println("THIS IN NOT EXECUTED IN THREAD"); 

     //This call creates a new Thread. It calls the run()-Method 
     new httpServer().start(); 
    } 
} 
0

This может быть полезно! Но я думаю, что @Kayaman уже дал ответ!

Смежные вопросы