Skip to content

This blog is no more….

Karena sibuk dan mulai malas ngeblog lagi, maka saya nyatakan bahwa…

This blog is no more…

Artinya ga bakal diapdet lagi……for good. Gw juga ga bakal singgah lagi so, no need to put ur comments…

Tapi blognya ga diapus sapa tau ada yg perlu.

So……ya wis….

Sertifikasi, penting atau tidak sih sebenarnya?

Sudah beberapa minggu saya bekerja di sebuah perusahaan yang bergerak di bidang pengembangan aplikasi java skala enterprise. Terus terang saya salut dengan rekan kerja saya yang programming javanya sudah layaknya makan kacang rebus alias tidak perlu mikir untuk mengupas kulit kacang, tangannya sudah bergerak-gerak sendiri di atas keyboard.
Melihat keahlian mereka, asumsi saya pasti paling rendah mereka memegang SCJP (Sun Certified Java Programmer). Ternyata asumsi saya salah. Dari sekitar 30 an orang programmer, ternyata hanya kurang dari 5 orang yang memegang SCJP, bahkan beberapa tidak tahu apa itu SCJP. Terus terang saya terkejut. Saya pikir jumlahnya terbalik (hanya kurang dari 5 yang tidak memegang SCJP).
Hal ini membuat saya bertanya, penting atau tidak sih sebenarnya sertifikasi keahlian profesi itu? Saat berdiskusi dengan rekan-rekan lainnya, saya menyimpulkan bahwa sertifikasi itu penting. Karena sertifikasi itu menaikkan harga jual dan posisi tawar dalam suatu tender. Saat tender untuk memilih kandidat perusahaan yang akan mengembangkan aplikasi penyelenggara tender, maka penyelenggara juga akan melihat kualifikasi dari para programmer dari perusahaan bersangkutan. CV dari para programmer akan dikirimkan ke penyelenggara tender untuk melihat kualifikasi. Jika programmer sudah memiliki sertifikasi apalagi yang bertaraf internasional, maka otomatis kans dan harga jual dari peserta tender akan meningkat.
Tapi, selayaknya sertifikat yang kita punya juga diimbangi dengan pengalaman dan keahlian tidak seperti kabar yang beredar baru-baru ini. Banyak programmer dari negeri bawang dan martabak yang diacuhkan di negeri dekat batam dikarenakan sertifikat yang bertumpuk tapi pengalaman dan keahlian yang minim.
Jadi, anggaplah sertifikat itu sebagai suatu evaluasi dari kemampuan kita selayaknya ujian akhir semester. Jadi belajar dulu secara umum baru evaluasi dengan mengambil sertifikasi, bukannya belajar untuk mengambil sertifikasi (beli soal dari testking, terus belajar dari sana karena 80% soal mirip -loh kok malah ngasih hint??).

Interview Java Developer

Kemarin saya menjalani interview untuk posisi Java Developer di salah satu perusahaan IT yang fokus pada aplikasi Banking. Proses penerimaannya bisa dibilang sangat express. Senin setor CV, Rabu dipanggil interview, Jumat interview langsung diterima.
Interview dijadwalkan jam 10 tapi molor sampai jam 11 lewat. Sebelum interview, saya diharuskan mengisi form dan semacam ujian tertulis (basic interview question -judul testnya). Formnya standar, menanyakan biodata, prestasi, pengalaman kerja, gaji yang diinginkan, dst. Ujian tertulisnya ada 12 pertanyaan. Simple, contohnya: apa itu java, apa object oriented, apa database, apa n-tier application, dll.
Interviewnya dibagi dua session. Session pertama dengan interviewer yang menanyakan hal-hal teknikal dan menelusuri sejauh mana pengetahuan tentang Java. Polymorphism, multithreading, dll. Tidak ada disuruh membuat program. Hanya konsep. Kemudian ia menanyakan sejauh mana pengetahuan tentang J2EE. Familiar dengan framework apa? struts, spring? Koneksi database dengan Hibernate pernah? dll. Karena saya belum familiar dengan J2EE saya jawab terus terang. Saya belum tahu.
Session kedua dengan HR Manager (sepertinya..). Ia menjelaskan tentang business line perusahaan, bla bla bla. Terus melihat gross salary yang saya tulis 3 juta. Komentarnya: “Ini terlalu tinggi untuk fresh graduate”. Kemudian nego gaji akhirnya disepakati 2.8 juta (So much for 5 jt T_T…Hai kamu orang-orang yang bilang gaji developer java paling rendah 4 juta…dasar boong). Terus diterima dan akhirnya membicarakan tanggal masuk kerja. Yah, skripsi juga belum kelar….akhirnya sepakat kerja mulai bulan depan setelah skripsi.
Fiuh, gak jadi nganggur deh. Tapi kapan mau beli mobil, beli rumah…..T_T

Populate JList from JTextField

How to populate list above from the textfields?

Firstly, create the GUI using your preferred IDE (i used netbeans).

Next, add these method from actionPerformed event called from addButton and removeButton

private void btnAddActionPerformed(java.awt.event.ActionEvent evt) {
addToList();
}
private void btnRemoveActionPerformed(java.awt.event.ActionEvent evt) {
removeFromList();
}

Next, we define the methods.

void addToList() {
String name = txtIPAddress.getText();
Target participants;
//User didn't type in a unique name
if (name.equals("") || alreadyInList(name)) {
Toolkit.getDefaultToolkit().beep();
txtIPAddress.requestFocusInWindow();
txtIPAddress.selectAll();
return;
}
String input = txtIPAddress.getText() + " video: " + txtPortVideo.getText()
+ " audio: " + txtPortAudio.getText();
listModel.addElement(input);
txtIPAddress.setText("");
txtPortAudio.setText("");
txtPortVideo.setText("");
}


void removeFromList() {
int index = listParticipant.getSelectedIndex();
listModel.remove(index);

int size = listModel.getSize();

if (size == 0) { //Nobody's left, disable firing.
btnRemove.setEnabled(false);

}
else { //Select an index.
if (index == listModel.getSize()) {
//removed item in last position
index--;
}

listParticipant.setSelectedIndex(index);
listParticipant.ensureIndexIsVisible(index);
}
}


boolean alreadyInList(String name) {
if (listModel.contains(name)) {
//add import.javax.swing.JOptionPane first
JOptionPane.showMessageDialog(this, "The participant is already exists");
return true;
}
return false;
}


public void valueChanged(ListSelectionEvent e) {
if (e.getValueIsAdjusting() == false) {

if (listParticipant.getSelectedIndex() == -1) {
//No selection, disable fire button.
btnRemove.setEnabled(false);

} else {
//Selection, enable the fire button.
btnRemove.setEnabled(true);
}
}
}

In the class declaration, we implements ListSelectionListenerInterface. Moreover, we declare an instance variable called listModel of type DefaultListModel. Our coding actually manipulate this listModel because we cannot manipulate JList directly. So, we add these code:

public class Tx extends javax.swing.JFrame implements ListSelectionListener {
private DefaultListModel listModel = new DefaultListModel();
public Tx() {
initComponents();
listParticipant.setModel(listModel);
listParticipant.addListSelectionListener(this);
}

That is how you populate JList from JTextField.

Membuat Aplikasi Video Conference dengan JMF bagian 3: Capture

Di post sebelum ini kita sudah membahas bagaimana memainkan multimedia dari local disk. Sekarang kita akan membahas bagaimana caranya untuk capture video dan audio dari web cam dan microphone dan menampilkannya di aplikasi kita.

Pertama, kita buat class untuk menangani format dari video dan audio kita.

import java.awt.*;
import java.awt.event.*;
import java.util.Vector;
import javax.media.*;
import javax.media.format.*;
import javax.media.protocol.DataSource;
import javax.swing.*;

public class CaptureDeviceDialog extends Dialog implements ActionListener, ItemListener {

boolean configurationChanged = false;
Vector devices;
Vector audioDevices;
Vector videoDevices;
Vector audioFormats;
Vector videoFormats;
Choice audioDeviceCombo;
Choice videoDeviceCombo;
Choice audioFormatCombo;
Choice videoFormatCombo;

public CaptureDeviceDialog(Frame parent, String title, boolean mode) {
super(parent, title, mode);
init();
}

private void init() {
setSize(450, 180);
Panel p = new Panel();
p.setLayout(null);

Label l1 = new Label(“Audio Device(s)”);
Label l2 = new Label(“Video Device(s)”);
Label l3 = new Label(“Audio Format(s)”);
Label l4 = new Label(“Video Format(s)”);
audioDeviceCombo = new Choice();
videoDeviceCombo = new Choice();
audioFormatCombo = new Choice();
videoFormatCombo = new Choice();

Button OKbutton = new Button(“OK”);
Button cancelButton = new Button(“Cancel”);

p.add(l1);
l1.setBounds(5, 5, 100, 20);
p.add(audioDeviceCombo);
audioDeviceCombo.setBounds(115, 5, 300, 20);
p.add(l3);
l3.setBounds(5, 30, 100,20);
p.add(audioFormatCombo);
audioFormatCombo.setBounds(115, 30, 300,20);
p.add(l2);
l2.setBounds(5, 55, 100, 20);
p.add(videoDeviceCombo);
videoDeviceCombo.setBounds(115, 55, 300, 20);
p.add(l4);
l4.setBounds(5, 80, 100, 20);
p.add(videoFormatCombo);
videoFormatCombo.setBounds(115, 80, 300, 20);
p.add(OKbutton);
OKbutton.setBounds(280, 115, 60, 25);
p.add(cancelButton);
cancelButton.setBounds(355, 115, 60, 25);

add(p, “Center”);
audioDeviceCombo.addItemListener(this);
videoDeviceCombo.addItemListener(this);
OKbutton.addActionListener(this);
cancelButton.addActionListener(this);

//get all the capture devices
devices = CaptureDeviceManager.getDeviceList ( null );
CaptureDeviceInfo cdi;
if (devices!=null && devices.size()>0) {
int deviceCount = devices.size();
audioDevices = new Vector();
videoDevices = new Vector();

Format[] formats;
for ( int i = 0;  i < deviceCount;  i++ ) {
cdi = (CaptureDeviceInfo) devices.elementAt ( i );
formats = cdi.getFormats();
for ( int j=0;  j<formats.length; j++ ) {
if ( formats[j] instanceof AudioFormat ) {
audioDevices.addElement(cdi);
break;
}
else if (formats[j] instanceof VideoFormat ) {
videoDevices.addElement(cdi);
break;
}
}
}

//populate the choices for audio
for (int i=0; i<audioDevices.size(); i++) {
cdi  = (CaptureDeviceInfo) audioDevices.elementAt(i);
audioDeviceCombo.addItem(cdi.getName());
}

//populate the choices for video
for (int i=0; i<videoDevices.size(); i++) {
cdi  = (CaptureDeviceInfo) videoDevices.elementAt(i);
videoDeviceCombo.addItem(cdi.getName());
}

displayAudioFormats();
displayVideoFormats();

} // end if devices!=null && devices.size>0
else {
//no devices found or something bad happened.
}
}

void displayAudioFormats() {
//get audio formats of the selected audio device and repopulate the audio format combo
CaptureDeviceInfo cdi;
audioFormatCombo.removeAll();

int i = audioDeviceCombo.getSelectedIndex();
//i = -1 –> no selected index

if (i!=-1) {
cdi = (CaptureDeviceInfo) audioDevices.elementAt(i);
if (cdi!=null) {
Format[] formats = cdi.getFormats();
audioFormats = new Vector();
for (int j=0; j<formats.length; j++) {
audioFormatCombo.add(formats[j].toString());
audioFormats.addElement(formats[j]);
}
}
}
}

void displayVideoFormats() {
//get audio formats of the selected audio device and repopulate the audio format combo
CaptureDeviceInfo cdi;
videoFormatCombo.removeAll();

int i = videoDeviceCombo.getSelectedIndex();
//i = -1 –> no selected index

if (i!=-1) {
cdi = (CaptureDeviceInfo) videoDevices.elementAt(i);
if (cdi!=null) {
Format[] formats = cdi.getFormats();
videoFormats = new Vector();
for (int j=0; j<formats.length; j++) {
videoFormatCombo.add(formats[j].toString());
videoFormats.addElement(formats[j]);
}
}
}
}

public CaptureDeviceInfo getAudioDevice() {
CaptureDeviceInfo cdi = null;
if (audioDeviceCombo!=null) {
int i = audioDeviceCombo.getSelectedIndex();
cdi = (CaptureDeviceInfo) audioDevices.elementAt(i);
}
return cdi;
}

public CaptureDeviceInfo getVideoDevice() {
CaptureDeviceInfo cdi = null;
if (videoDeviceCombo!=null) {
int i = videoDeviceCombo.getSelectedIndex();
cdi = (CaptureDeviceInfo) videoDevices.elementAt(i);
}
return cdi;
}

public Format getAudioFormat() {
Format format = null;
if (audioFormatCombo!=null) {
int i = audioFormatCombo.getSelectedIndex();
format = (Format) audioFormats.elementAt(i);
}
return format;
}

public Format getVideoFormat() {
Format format = null;
if (videoFormatCombo!=null) {
int i = videoFormatCombo.getSelectedIndex();
format = (Format) videoFormats.elementAt(i);
}
return format;
}

public boolean hasConfigurationChanged() {
return configurationChanged;
}

public void actionPerformed(ActionEvent ae) {
String command = ae.getActionCommand().toString();
if (command.equals(“OK”)) {
configurationChanged = true;
}
dispose();
}

public void itemStateChanged(ItemEvent ie) {
System.out.println(ie.getSource().toString());
if (ie.getSource().equals(audioDeviceCombo))
displayAudioFormats();
else
displayVideoFormats();

}
}
Itu adalah class untuk menangani user yang akan memilih format dari video dan audio yang akan di capture. Selanjutnya, kita tambahkan method capture pada JConference kita.

Pada action File–>Capture, kita ubah

System.out.println(“Sementara”);

menjadi

capture();

Selanjutnya kita tambahkan method capture() dan method-method yang mendukungnya

void registerDevices() {
CaptureDeviceDialog cdDialog = new
CaptureDeviceDialog(this, “Capture Device”, true);
cdDialog.setVisible(true);
if (!cdDialog.hasConfigurationChanged())
return;
//configuration has changed, update variables.
audioCDI = cdDialog.getAudioDevice();
if (audioCDI!=null) {
audioDeviceName = audioCDI.getName();
System.out.println(“Audio Device Name: ” + audioDeviceName);
}
videoCDI = cdDialog.getVideoDevice();
if (videoCDI!=null) {
videoDeviceName = videoCDI.getName();
System.out.println(“Video Device Name: ” + videoDeviceName);
}
//Get formats selected, to be used for creating DataSource
videoFormat = cdDialog.getVideoFormat();
audioFormat = cdDialog.getAudioFormat();
}
public synchronized void controllerUpdate(ControllerEvent event) {
System.out.println(event.toString());
if (event instanceof RealizeCompleteEvent) {
Component comp;
System.out.println(“Adding visual component”);
if ((comp = dualPlayer.getVisualComponent()) != null)
add (“Center”, comp);
System.out.println(“Adding control panel”);
if ((comp = dualPlayer.getControlPanelComponent()) != null)
add(“South”, comp);
validate();
}
}
void capture() {
if (audioCDI==null && videoCDI==null)
registerDevices();

try {
if (!(audioCDI==null && videoCDI==null)) {
DataSource[] dataSources = new DataSource[2];
System.out.println(“Creating data sources.”);
dataSources[0] = Manager.createDataSource(audioCDI.getLocator());
dataSources[1] = Manager.createDataSource(videoCDI.getLocator());
DataSource ds = Manager.createMergingDataSource(dataSources);
dualPlayer = Manager.createPlayer(ds);
dualPlayer.addControllerListener(this);
dualPlayer.start();
}
else
System.out.println(“CDI not found.”);
}
catch (Exception e) {
System.out.println(e.toString());
}
}

Post selanjutnya kita akan membahas tentang transmit receive paket-paket RTP (Real Time Protocol), protokol yang kita pakai untuk aplikasi kita.

EDIT : Saya sudah tidak programming tentang ini lagi dan sudah lupa juga.
Tapi saya masih ada source code yang dulu saya pakai develop dengan netbeans.
Silahkan download di
http://iyeyo.com/JVConfv1.0.rar

Membuat Aplikasi Video Conference dengan JMF bagian 2: Player

Di bagian 1 kita sudah membuat menu, sekarang kita akan membuat Player untuk memainkan media yang dipilih dari Menu File –> Open

Kita membuat satu class yang bertugas untuk memainkan file. Class ini adalah class MediaPlayer. Berikut adalah source code nya:

import javax.media.*;
import javax.media.Manager;
import javax.media.Player;
import java.net.URL;
import javax.swing.JPanel;
import java.awt.*;
import java.io.IOException;

public class MediaPlayer extends JPanel {

public MediaPlayer(URL mediaURL) {
setLayout( new BorderLayout() );
try {
//Create a player to play the media specified in the URL
Player thePlayer = Manager.createRealizedPlayer(mediaURL);
Component video = thePlayer.getVisualComponent(); //Add visual component
Component controls = thePlayer.getControlPanelComponent(); //Add audio component
this.add(video, BorderLayout.CENTER);
this.add(controls, BorderLayout.SOUTH);
thePlayer.start();
}
catch (NoPlayerException noPlayerException){
System.err.println( “No media player found” + noPlayerException );
}
catch (CannotRealizeException cannotRealizeException){
System.err.println( “Could not realize media player” + cannotRealizeException);
}
catch (IOException iOException){
System.err.println( “Error reading from the source” +iOException);
}
}
}

Kemudian, kita edit JConference kita.

Masukkan method openPlayFile() pada action menu File–>Open

Ganti

System.out.println(“Sementara”);

Dengan

openPlayFile();

Kemudian tambahkan method openPlayFile();

void openPlayFile() {
URL theURL = null;
JFileChooser fileChooser = new JFileChooser();
int result = fileChooser.showOpenDialog(null);
if (result == JFileChooser.APPROVE_OPTION) {
try
{
theURL = fileChooser.getSelectedFile().toURL();
}
catch ( MalformedURLException malformedURLException )
{
System.err.println( “Could not create URL for the file” + malformedURLException);
}
}
if (theURL != null)
{
MediaPlayer thePlayer = new MediaPlayer(theURL);
this.add(thePlayer, BorderLayout.CENTER);
this.setVisible(true);
}
}

Sekarang kita sudah membuat player untuk aplikasi kita. Post berikutnya akan menambahkan fasilitas capture untuk menampilkan dan menyimpan video dari web cam.

Membuat Aplikasi Video Conference dengan JMF bagian 1: Menu

Sekarang kita mencoba membuat aplikasi Video Conference menggunakan JMF.

Langkah awal, kita harus mengatur sistem kita agar dapat menjalankan JMF API.

Caranya install jdk kemudian JMF API dari Sun Microsystem. Lebih jelasnya lihat di post mengenai membuat pemutar mp3 dengan JMF di blog ini.

Langkah pertama, kita buat dulu GUI (Graphical User Interface) dari aplikasi tersebut.

Post ini akan mengulas pembuatan menu dulu. Selanjutnya akan dibuat secara bertahap.  Karena sambil dibuat sambil dipost, maka mungkin akan banyak perubahan dari awal. Jadi silahkan disimak bertahap.

Berikut adalah source code untuk menu nya:

import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.*;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JFrame;

public class JConference extends JFrame {

public JConference() {
super(“JConference v1.0”);
//Beginning of File Menu
JMenu fileMenu = new JMenu(“File”);
fileMenu.setMnemonic(‘F’);
//File–>Open
JMenuItem openItem = new JMenuItem(“Open File”);
openItem.setMnemonic(‘O’);
fileMenu.add(openItem);
//Action for File–>Open
openItem.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent event) {
System.out.println(“Sementara”);
}
});
//File–>Capture
JMenuItem captureItem = new JMenuItem(“Capture”);
captureItem.setMnemonic(‘P’);
fileMenu.add(captureItem);
//Action for File–>Capture
captureItem.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent event) {
System.out.println(“Sementara”);
}
});
//File–>Exit
JMenuItem exitItem = new JMenuItem(“Exit”);
exitItem.setMnemonic(‘X’);
fileMenu.add(exitItem);
//Action for File–>Exit
exitItem.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent event) {
System.exit(0);
}
});
//End of File Menu
//Beginning of Player Menu
JMenu playerMenu = new JMenu(“Player”);
playerMenu.setMnemonic(‘P’);
//Player–>SnapShot
JMenuItem snapItem = new JMenuItem(“SnapShot”);
snapItem.setMnemonic(‘S’);
playerMenu.add(snapItem);
//Action for Player–>SnapShot
snapItem.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent event) {
System.out.println(“Sementara”);
}
});
//End of Player Menu
//Beginning of Conference Menu
JMenu conferenceMenu = new JMenu(“Conference”);
conferenceMenu.setMnemonic(‘C’);
//Conference–>Join Session
JMenuItem joinItem = new JMenuItem(“Join Session”);
joinItem.setMnemonic(‘J’);
conferenceMenu.add(joinItem);
//Action for Player–>Join Session
joinItem.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent event) {
System.out.println(“Sementara”);
}
});
//Conference–>Terminate Session
JMenuItem terminateItem = new JMenuItem(“Terminate Session”);
terminateItem.setMnemonic(‘T’);
conferenceMenu.add(terminateItem);
//Action for Player–>Terminate Session
terminateItem.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent event) {
System.out.println(“Sementara”);
}
});
//End of Conference Menu
//Adding Menus to Menu Bar
JMenuBar bar = new JMenuBar();
setJMenuBar(bar);
bar.add(fileMenu);
bar.add(playerMenu);
bar.add(conferenceMenu);
//Display Properties of Menu
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(500, 500);
}
public static void main(String[] args) {
JConference JConf = new JConference();
JConf.setVisible(true);
}

}

Di post selanjutnya kita akan membuat method-method untuk memainkan file.

Membuat Pemutar Video dengan JMF

Di post sebelumnya kita sudah belajar membuat pemutar mp3, sekarang kita menambahkan fitur pemutar video.

Perlu diingat bahwa tidak semua format video didukung oleh JMF.

Kita dapat menambahkan source code dari post sebelumya pada pemutar mp3.

Berikut adalah tambahannya.

Pada constructor, kita tambahkan component berikut:

Component visualComponent = myPlayer.getVisualComponent();
this.getContentPane().add(visualComponent, BorderLayout.CENTER);

ukuran frame juga kita ubah untuk menampung visual.

this.setSize(new Dimension(500, 400));

kita juga menambah method play() sebagai berikut:

myPlayer.start();

sehingga pada akhirnya, berikut source code lengkapnya:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.media.*;
import java.net.*;

public class HelloJMF extends JFrame {
static Player myPlayer = null;
public HelloJMF() {
super(“Demo JMF”);
play();
Component panelControl = myPlayer.getControlPanelComponent();
Component visualComponent = myPlayer.getVisualComponent();
this.getContentPane().add(panelControl, BorderLayout.SOUTH);
this.getContentPane().add(visualComponent, BorderLayout.CENTER);
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent we) {
stop();
System.exit(0);
}
});
this.pack();
this.setSize(new Dimension(500, 400));
this.setVisible(true);
}
public static void main(String[] args) {
HelloJMF helloJMF = new HelloJMF();
}
void play() {
try {
URL url = new URL(“file”,null,”C:\\Dani California.mpg”);
myPlayer = Manager.createRealizedPlayer(url);
myPlayer.start();
}
catch (Exception e) {
System.out.println(“Unable to create the audioPlayer :” + e);
}
}
void stop() {
myPlayer.stop();
myPlayer.close();
}
}
Selamat memutar video!

Membuat Pemutar MP3 dengan JMF

Sudah lama tidak update blog…

Sekarang kita mau mencoba pemutar MP3 yang sangat sederhana menggunakan Java.

Java menyediakan beberapa API (Application Programming Interface) untuk memudahkan pengembang Java membuat aplikasi multimedia. Salah satunya adalah Java Media Framework (JMF) API. http://java.sun.com/products/java-media/jmf/.
Sebelum kita mulai pada pembuatan aplikasi tersebut, berikut adalah prerequisite yang diperlukan.
1. Tentu saja JDK..
2. Install JMF API yang dapat didownload pada link di atas

Jika prerequisite sudah dipenuhi, mari kita mulai pembuatan aplikasinya.

Sebelum kita membuat aplikasinya, kita perlu membuat tempat menampungnya. Jadi kita membuat Frame dulu.

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class HelloJMF extends JFrame {
public HelloJMF() {
super(“Demo JMF”);
JLabel empty = new JLabel(); /*sementara kita gunakan JLabel untuk memperagakan penempatan sebuah control pada frame*/
this.getContentPane().add(empty, BorderLayout.CENTER);
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent we) {
System.exit(0);
}
});
this.pack();
this.setSize(new Dimension(300, 100));
this.setVisible(true);
}
public static void main(String[] args) {
HelloJMF helloJMF = new HelloJMF();
}
}

Setelah kode dieksekusi, maka akan muncul frame seperti berikut:
demoframe

Sekarang kita gunakan frame untuk menampung pemutar mp3 kita.
pertama, tambahkan beberapa statement import

import javax.media.*;
import java.net.*;

kemudian buat method play() dan stop()
void play() {
try {
URL url = new URL(“file”,null,”C:\\Coldplay-Fix You.mp3″);
myPlayer = Manager.createRealizedPlayer(url);
}
catch (Exception e) {
System.out.println(“Unable to create the audioPlayer :” + e);
}
}
void stop() {
myPlayer.stop();
myPlayer.close();
}

kemudian edit contructor kita menjadi:

public HelloJMF() {
super(“Demo JMF”);
play();
Component control = myPlayer.getControlPanelComponent();
this.getContentPane().add(control, BorderLayout.CENTER);
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent we) {
stop();
System.exit(0);
}
});
this.pack();
this.setSize(new Dimension(300, 100));
this.setVisible(true);
}

sehingga pada akhirnya kode kita akan berbentuk sebagai berikut:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.media.*;
import java.net.*;

public class HelloJMF extends JFrame {
static Player myPlayer = null;
public HelloJMF() {
super(“Demo JMF”);
play();
Component control = myPlayer.getControlPanelComponent();
this.getContentPane().add(control, BorderLayout.CENTER);
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent we) {
stop();
System.exit(0);
}
});
this.pack();
this.setSize(new Dimension(300, 100));
this.setVisible(true);
}
public static void main(String[] args) {
HelloJMF helloJMF = new HelloJMF();
helloJMF.play();
}
void play() {
try {
URL url = new URL(“file”,null,”C:\\Coldplay-Fix You.mp3″);
myPlayer = Manager.createRealizedPlayer(url);
}
catch (Exception e) {
System.out.println(“Unable to create the audioPlayer :” + e);
}
}
void stop() {
myPlayer.stop();
myPlayer.close();
}
}

File mp3 yang akan kita putar dapat diletakkan di C:\ColdPlay-Fix You.mp3 (absolute path) seperti contoh. Tapi, bisa juga diletakkan di directory yang sama seperti file .class (hasil compile) sehingga kita hanya menulis “ColdPlay-Fix You.mp3” Dengan demikian, kita sudah dapat membuat pemutar mp3 sederhana. Pengembangan berikutnya kita bisa menggunakan pemutar mp3 yang sudah beredar sebagai benchmark untuk membuat pemutar mp3 yang lebih lengkap fiturnya.
Selamat membuat!

Setting Classpath and Environment Variables

Just recently, when i need to install ant for my final year project, i kind of reminiscent back to that day when i need to set up the path variables and the classpath. It took me about one whole day to figure out how to compile and interpret .java file to run. Frustated i am, yes, because at that time i didn’t have internet connection (hence, googling is not as meaningful). When i did find how it is done by myself, i felt really ecstatic i treat myself a lavish dinner (I didn’t get to eat lavish dinner very often).

When i first started coding using Java, i didn’t use fancy IDEs like Eclipse or NetBeans, instead, i use Text Editor. This way, i get to know the basic of compiling, interpreting, setting classpath, etc. Compiling the sources itself took me about an hour because i didn’t want to go to java directory first then call the javac.exe. So, i didnt want to call cds command every so often anytime i use the command prompt to compile the .java file. I just want to be able to call javac in any working directory. Instead of always go to this directory:

C:\Program Files\Java\jdk1.5.0_07\bin>javac HelloWorld.java

i want to use the javac in any working directory, i.e:

C:\My Java Programs>javac HelloWorld.java

How to do this? First of all, you must set the environment variables. In Vista, this can be done on

Control Panel–>System–>Advanced System Settings

In Advanced tab, click Environment Variables button.

In System Variables group, find PATH variable and edit it by adding your Java directory where the javac.exe resides. So, in my case it would be:

some path;C:\Program Files\Java\jdk1.5.0_07\bin;

Click OK, open command prompt and then try typing any name of executable file in the bin directory. It works doesn’t it?

Now, you probably curious about what the environment variables are:

Microsoft defines them to be:

Environment variables are strings that contain information such as drive, path, or file name. They control the behavior of various programs. For example, the TEMP environment variable specifies the location in which programs place temporary files.

So, the PATH variable that we’ve edited specify the location of executable files. Such as dir, ping, cd, etc. By setting the PATH variable, we don’t need to change the working directory to the one that has ping.exe , for example. That is why by adding our java directory to the PATH variable, we can call the command in any working directory.

Now, about the classpath.

Sun has a very comprehensive tutorial on setting the classpath, so just check it out here.

If you want to keep things simpe, you can set the environment variable so you won’t keep typing classpath directory for each cmd session.

So, add the environment variable : java

give the value to the directory where all your java source code, ex:C:\java.

Next, when you try to compile and run your java, you can type:

C:\anydirectory>javac %java%\HelloWorld.java

C:\anydirectory>java -classpath %java% HelloWorld

There you go!