다음과 같은 방법을 사용하세요.
public void Test() {
    new Thread(new Runnable() {
        @Override
        public void run() {
            Handler cHandler = new Handler(Looper.getMainLooper()) {
                @Override public void handleMessage(Message msg) {
                    // 이제 오류 안 뜸.
                	Toast.makeText(MainActivity.this, 
                	               	              "오류 안 뜸", 
               	               	               	       Toast.LENGTH_LONG).show();
                }
            };
            cHandler.sendEmptyMessage(0);
        }
    }).start();
}
	또는 
public void Test() {
    new Thread(new Runnable() {
        @Override
        public void run() {
            new Handler(Looper.getMainLooper()).post(new Runnable() {
				@Override
				public void run() {
					Toast.makeText(MainActivity.this,
 								      "Hello World!!",
								       Toast.LENGTH_LONG).show();
				}
			});
        }
    }).start();
}
	  기본 생성자를 통하여 Handler 를 생성하면 내부적으로 Looper.myLooper() 를 호출하여 생성된 Handler 가 사용할 Looper 를 가져옵니다.  하지만 질문에 들어있는 코드에서 생성된 쓰레드는 Looper 를 사용하지 않습니다. 그렇기 때문에 오류가 나는 것 입니다.
	  즉 Looper 를 사용하지 않는 쓰레드에서 Handler 의 기본 생성자를 이용하여 생성할 때, 내부에서 Looper.myLooper() 메소드를 이용하여 현재 쓰레드와 관련된 루퍼를 가져옵니다. 하지만 질문자님께서 생성한 쓰레드는 Looper를 사용하는 쓰레드가 아니며, 결국 myLooper() 가 null 을 리턴하기 때문에 에러가 나는 것 입니다.
	   하지만 Looper.getMainLooper() 메소드를 호출하여 반환된 값을 인자값으로 넣어주면 에러가 발생하지 않습니다.      
	    Looper.getMainThread() 를 통하여 가져온 Looper는 앱의 메인 쓰레드와 관련된 Looper 입니다. 
	  루퍼에 대한 설명 : http://developer.android.com/reference/android/os/Looper.html