Clase Java que funciona como una aplicación pero no como un applet

Soy un desarrollador android y no tienen un amplio conocimiento sobre el desarrollo web java, así que por favor, tenga paciencia conmigo si la pregunta es un poco extraño. He creado una clase de Java que se supone que recibe paquetes de datos en forma de audio de una aplicación de Android y lo juega en altavoces de PC. La aplicación es básicamente una aplicación de streaming de teléfono a servidor. La clase se está ejecutando correctamente como una aplicación.

Aquí está el código para la clase :

class Server { AudioInputStream audioInputStream; static AudioInputStream ais; static AudioFormat format; static boolean status = true; static int port = 50005; static int sampleRate = 8000; public static void main(String args[]) throws Exception { DatagramSocket serverSocket = new DatagramSocket(50005); /** * Formula for lag = (byte_size/sample_rate)*2 * Byte size 9728 will produce ~ 0.45 seconds of lag. Voice slightly broken. * Byte size 1400 will produce ~ 0.06 seconds of lag. Voice extremely broken. * Byte size 4000 will produce ~ 0.18 seconds of lag. Voice slightly more broken then 9728. */ byte[] receiveData = new byte[5000]; format = new AudioFormat(sampleRate, 16, 1, true, false); while (status == true) { DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); serverSocket.receive(receivePacket); ByteArrayInputStream baiss = new ByteArrayInputStream( receivePacket.getData()); ais = new AudioInputStream(baiss, format, receivePacket.getLength()); toSpeaker(receivePacket.getData()); } } public static void toSpeaker(byte soundbytes[]) { try { DataLine.Info dataLineInfo = new DataLine.Info(SourceDataLine.class, format); SourceDataLine sourceDataLine = (SourceDataLine) AudioSystem.getLine(dataLineInfo); sourceDataLine.open(format); FloatControl volumeControl = (FloatControl) sourceDataLine.getControl(FloatControl.Type.MASTER_GAIN); volumeControl.setValue(6.0206f); sourceDataLine.start(); sourceDataLine.open(format); sourceDataLine.start(); System.out.println("format? :" + sourceDataLine.getFormat()); sourceDataLine.write(soundbytes, 0, soundbytes.length); System.out.println(soundbytes.toString()); sourceDataLine.drain(); sourceDataLine.close(); } catch (Exception e) { System.out.println("Not working in speakers..."); e.printStackTrace(); } } } 

Ahora quería convertir la clase en un applet de tal manera que pueda implementar lo mismo que una aplicación web. Aquí está el código para el applet :

 public class AppletTest extends Applet { AudioInputStream audioInputStream; static AudioInputStream ais; static AudioFormat format; static boolean status = true; static int port = 50005; static int sampleRate = 8000; public void init() { } public void stop() { } public void listening() { DatagramSocket serverSocket = null; try { serverSocket = new DatagramSocket(50005); } catch (SocketException e) { // TODO Auto-generated catch block e.printStackTrace(); } /** * Formula for lag = (byte_size/sample_rate)*2 * Byte size 9728 will produce ~ 0.45 seconds of lag. Voice slightly broken. * Byte size 1400 will produce ~ 0.06 seconds of lag. Voice extremely broken. * Byte size 4000 will produce ~ 0.18 seconds of lag. Voice slightly more broken then 9728. */ byte[] receiveData = new byte[5000]; format = new AudioFormat(sampleRate, 16, 1, true, false); while (status == true) { DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); try { serverSocket.receive(receivePacket); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } ByteArrayInputStream baiss = new ByteArrayInputStream( receivePacket.getData()); ais = new AudioInputStream(baiss, format, receivePacket.getLength()); toSpeaker(receivePacket.getData()); } } public static void toSpeaker(byte soundbytes[]) { try { DataLine.Info dataLineInfo = new DataLine.Info(SourceDataLine.class, format); SourceDataLine sourceDataLine = (SourceDataLine) AudioSystem.getLine(dataLineInfo); sourceDataLine.open(format); FloatControl volumeControl = (FloatControl) sourceDataLine.getControl(FloatControl.Type.MASTER_GAIN); volumeControl.setValue(6.0206f); sourceDataLine.start(); sourceDataLine.open(format); sourceDataLine.start(); System.out.println("format? :" + sourceDataLine.getFormat()); sourceDataLine.write(soundbytes, 0, soundbytes.length); System.out.println(soundbytes.toString()); sourceDataLine.drain(); sourceDataLine.close(); } catch (Exception e) { System.out.println("Not working in speakers..."); e.printStackTrace(); } } } 

El código html para llamar al applet :

 <HTML> <TITLE>Applet Test</TITLE> <HEAD></HEAD> <BODY> <applet code="AppletTest.class" height="200" width="500">Applet</applet> </BODY> </HTML> 

He recibido el applet aquí

Esta es la actividad de Android para enviar sonido en forma de datapackets :

 public class SendActivity extends Activity { private Button startButton, stopButton; public byte[] buffer; public static DatagramSocket socket; private int port = 50005; AudioRecord recorder; private int sampleRate = 8000; @SuppressWarnings("deprecation") private int channelConfig = AudioFormat.CHANNEL_IN_MONO; private int audioFormat = AudioFormat.ENCODING_PCM_16BIT; int minBufSize = AudioRecord.getMinBufferSize(sampleRate, channelConfig, audioFormat); private boolean status = true; int bufferSizeInBytes; int bufferSizeInShorts; int shortsRead; short audioBuffer[]; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_send); startButton = (Button) findViewById(R.id.start_button); stopButton = (Button) findViewById(R.id.stop_button); startButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { status = true; startStreaming(); } }); stopButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { status = false; recorder.release(); Log.d("VS", "Recorder released"); } }); minBufSize += 5120; System.out.println("minBufSize: " + minBufSize); } public void startStreaming() { Thread streamThread = new Thread(new Runnable() { @Override public void run() { try { DatagramSocket socket = new DatagramSocket(); Log.d("VS", "Socket Created"); byte[] buffer = new byte[minBufSize]; Log.d("VS", "Buffer created of size " + minBufSize); DatagramPacket packet; final InetAddress destination = InetAddress .getByName("http://abhideepmallick.byethost16.com/"); //final InetAddress destination = InetAddress.getByName("192.168.1.20");//machine IP Log.d("VS", "Address retrieved"); recorder = new AudioRecord(MediaRecorder.AudioSource.VOICE_RECOGNITION, sampleRate, channelConfig, audioFormat, minBufSize * 10); Log.d("VS", "Recorder initialized"); recorder.startRecording(); while (status == true) { // reading data from MIC into buffer minBufSize = recorder.read(buffer, 0, buffer.length); // putting buffer in the packet packet = new DatagramPacket(buffer, buffer.length, destination, port); socket.send(packet); System.out.println("MinBufferSize: " + minBufSize); } } catch (UnknownHostException e) { Log.e("VS", "UnknownHostException"); } catch (IOException e) { e.printStackTrace(); Log.e("VS", "IOException"); } } }); streamThread.start(); } } 

Archivo de diseño de Android:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".SendActivity" > <Button android:id="@+id/stop_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/start_button" android:layout_alignBottom="@+id/start_button" android:layout_toRightOf="@+id/start_button" android:text="Stop" /> <Button android:id="@+id/start_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_marginLeft="79dp" android:layout_marginTop="163dp" android:text="Start" /> </RelativeLayout> 

¿Qué debo hacer para que la clase java funcione como un applet?

Supongo que usted logró que el complemento java para el navegador esté actualizado, para poder iniciar el applet.

Un applet también tiene un lifecylce como una actividad.

El método init () es como un constructor, y el propósito del método start () es informar al applet que debería comenzar a ejecutarse.

Por lo tanto, anule el método de inicio y llame a su método de escucha desde allí. Para obtener más información, puede navegar a través de esta diapositiva: http://de.slideshare.net/myrajendra/applet-life-cycle

Un ejemplo se puede encontrar aquí: http://www.ugrad.cs.ubc.ca/~cs219/CourseNotes/Java/applets/lifecycle.html

  • ¿Cómo cambia el color del subrayado de Edittext en 4.0+?
  • Cómo verificar si existe un valor en HashMap
  • Cómo abrir la configuración GPS de un dispositivo Android?
  • Lanzamiento de actividades dentro de una pestaña en Android
  • Mejor implementación de Rotate3dAnimation en Android ViewFlipper
  • ¿Qué android: attr / listPreferredItemHeight está haciendo y cómo?
  • Detectar subrogados altos en una cadena utilizando expresiones regulares
  • Error: Error de ejecución para la tarea ': app: transformClassesAndResourcesWithProguardForDebug'
  • Android: ¿Cómo puedo cambiar la altura de un ProgressBar?
  • SQLite de Android que elimina una fila específica de la base de datos
  • Cómo crear AsyncTasks reutilizables en android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.