PRAKTIKUM ABSTRACT WINDOWING TOOLKIT DAN SWING 1. Tujuan a. Memahami persamaan dan perbedaan antara AWT dan Swing b. Perbedaan antara komponen dan kontainer. c. Mendesain aplikasi GUI menggunakan AWT. d. Mendesain aplikasi GUI menggunakan Swing. e. Menjelaskan tentang flow layout, border layout, dan grid layout dalam komponen GUI f. Membuat tampilan yang komplek dalam mendesain aplikasi GUI. 2. Latar Belakang Tanpa mempelajari tentang grapichal user interface (GUI) API, Anda masih tetap bisa membuat suatu program. Tetapi, program Anda akan kelihatan tidak menarik dan tidak nyaman digunakan bagi para user. Memiliki GUI yang baik dapat memberi efek pada penggunaan aplikasi. Java menyediakan banyak tool seperti Abstract Windowing Toolkit dan Swing untuk mengembangkan aplikasi GUI yang interaktif. The Java Foundation Class (JFC), merupakan bagian penting dari Java SDK, yang termasuk dalam koleksi dari API dimana dapat mempermudah pengembangan aplikasi JAVA GUI. JFC termasuk diantara 5 bagian utama dari API yaitu AWT dan Swing. Tiga bagian yang lainnya dari API adalah Java2D, Accessibility, dan Drag and Drop. Semua itu membantu developer dalam mendesain dan mengimplementasikan aplikasi dengan visualisasi yang lebih baik. AWT dan Swing menyediakan komponen GUI yang dapat digunakan dalam membuat aplikasi Java dan applet. Anda akan mempelajari applet pada bab berikutnya. Tidak seperti beberapa komponen AWT yang menggunakan native code, keseluruhan Swing ditulis menggunakan bahasa pemrograman Java. Swing menyediakan implementasi platform-independent dimana aplikasi yang dikembangkan dengan platform yang berbeda dapat memiliki tampilan yang sama. Begitu juga dengan AWT menjamin tampilan look and feel pada aplikasi yang dijalankan pada dua mesin yang berbeda menjadi terlihat sama. Swing API dibangun dari beberapa API yang mengimplementasikan beberapa jenis bagian dari AWT. Kesimpulannya, komponen AWT dapat digunakan bersama dengan komponen Swing.
3. Percobaan
Percobaan 1 Menampilkan Frame: import java.awt.Frame; public class SampleFrame extends Frame{ public SampleFrame() { } public static void main(String args[]) { SampleFrame sf = new SampleFrame(); sf.setSize(300, 300); //Coba hilangkan baris ini sf.setVisible(true); //Coba hilangkan baris ini } }
Hasil Percobaan
Percobaan 2 Menampilkan Panel:
import java.awt.Color; import java.awt.Font; import java.awt.Frame; import java.awt.Graphics; import java.awt.Panel; public class GraphicPanel extends Panel { public GraphicPanel() { setBackground(Color.blue); } @Override public void paint(Graphics g) { g.setColor(new Color(152,255,200)); //green g.setFont(new Font("Helvetica",Font.PLAIN,16)); g.drawString("Hello Munzir Aceh!", 30, 100); g.setColor(new Color(1.0f,0,0)); //red g.fillRect(30, 100, 150, 10); } public static void main(String args[]) { Frame f = new Frame("Testing Graphics Panel"); GraphicPanel gp = new GraphicPanel(); f.add(gp); f.setSize(600, 300); f.setVisible(true); } }
Hasil Percobaan
Percobaan 3 Menampilkan Frame Control:
import java.awt.*; public class FrameWControls extends Frame{ public FrameWControls() { } public static void main(String args[]) { FrameWControls fwc = new FrameWControls(); fwc.setLayout(new FlowLayout()); //more on this later fwc.setSize(600, 600); fwc.add(new Button("Test Me!")); fwc.add(new Label("Labe")); fwc.add(new TextField()); CheckboxGroup cbg = new CheckboxGroup(); fwc.add(new Checkbox("chk1", cbg, true)); fwc.add(new Checkbox("chk2", cbg, false)); fwc.add(new Checkbox("chk3", cbg, false)); List list = new List(3, false); list.add("MTV"); list.add("V"); fwc.add(list); Choice chooser = new Choice(); chooser.add("Avril"); chooser.add("Monica"); chooser.add("Britney"); fwc.add(chooser); fwc.add(new Scrollbar()); fwc.setVisible(true); } }
Hasil Percobaan
Percobaan 4 Menampilkan Flow Layout Demo:
import java.awt.*; public class FlowLayoutDemo extends Frame{ public FlowLayoutDemo() { } public static void main(String args[]) { FlowLayoutDemo fld = new FlowLayoutDemo(); fld.setLayout(new FlowLayout(FlowLayout.RIGHT, 10, 10)); fld.add(new Button("ONE")); fld.add(new Button("TWO")); fld.add(new Button("THREE")); fld.setSize(100, 100); fld.setVisible(true); } }
Hasil Percobaan
Percobaan 5 Menampilkan Border Layout Demo:
import java.awt.*; public class BorderLayoutDemo extends Frame{ public BorderLayoutDemo() { } public static void main(String args[]) { BorderLayoutDemo bld = new BorderLayoutDemo(); bld.setLayout(new BorderLayout(10, 10)); //may remove bld.add(new Button("NORTH"), BorderLayout.NORTH); bld.add(new Button("SOUTH"), BorderLayout.SOUTH); bld.add(new Button("EAST"), BorderLayout.EAST); bld.add(new Button("WEST"), BorderLayout.WEST); bld.add(new Button("CENTER"), BorderLayout.CENTER); bld.setSize(200, 200); bld.setVisible(true); } }
Hasil Percobaan
Percobaan 6 Menampilkan Grid Layout Demo:
import java.awt.*; public class GridLayoutDemo extends Frame { public GridLayoutDemo() { } public static void main(String args[]) { GridLayoutDemo gld = new GridLayoutDemo(); gld.setLayout(new GridLayout(2, 3, 4, 4)); gld.add(new Button("ONE")); gld.add(new Button("TWO")); gld.add(new Button("THREE")); gld.add(new Button("FOUR")); gld.add(new Button("FIVE")); gld.setSize(200, 200); gld.setVisible(true); } }
Hasil Percobaan
Percobaan 7 Menampilkan Complex Layout:
import java.awt.*; public class ComplexLayout extends Frame{ public ComplexLayout() { } public static void main(String args[]) { ComplexLayout cl = new ComplexLayout(); Panel panelNorth = new Panel(); Panel panelCenter = new Panel(); Panel panelSouth = new Panel(); panelNorth.add(new Button("ONE")); panelNorth.add(new Button("TWO")); panelNorth.add(new Button("THREE")); panelCenter.setLayout(new GridLayout(4,4)); panelCenter.add(new TextField("1st")); panelCenter.add(new TextField("2nd")); panelCenter.add(new TextField("3rd")); panelCenter.add(new TextField("4th")); panelSouth.setLayout(new BorderLayout()); panelSouth.add(new Checkbox("Choose me!"), BorderLayout.CENTER); panelSouth.add(new Checkbox("I'm here!"), BorderLayout.EAST); panelSouth.add(new Checkbox("Pick me!"), BorderLayout.WEST); cl.add(panelNorth, BorderLayout.NORTH); cl.add(panelCenter, BorderLayout.CENTER); cl.add(panelSouth, BorderLayout.SOUTH); cl.setSize(300,300); cl.setVisible(true); } }
Hasil Percobaan
Percobaan 8 Menampilkan Swing Demo:
import java.awt.*; import javax.swing.*; public class SwingDemo { JFrame frame; JPanel panel; JTextField textField; JButton button; Container contentPane; public SwingDemo() { } void launchFrame() { frame = new JFrame("My First Swing Application"); panel = new JPanel(); textField = new JTextField("Default text"); button = new JButton("Click me!"); contentPane = frame.getContentPane(); panel.add(textField); panel.add(button); contentPane.add(panel, BorderLayout.CENTER); frame.pack(); frame.setVisible(true); } public static void main(String args[]) { SwingDemo sd = new SwingDemo(); sd.launchFrame(); } }
Hasil Percobaan
Percobaan 9 Menampilkan JOption Demo:
import javax.swing.*; import java.awt.*; public class JOptionPaneDemo { JOptionPane optionPane; public JOptionPaneDemo() { } void launchFrame() { optionPane = new JOptionPane(); String name = JOptionPane.showInputDialog("Hi, what's yourname?"); JOptionPane.showMessageDialog(null,"Nice to meet you, " + name + ".", "Greeting...",JOptionPane.PLAIN_MESSAGE); System.exit(0); } public static void main(String args[]) { new JOptionPaneDemo().launchFrame(); } }
Hasil Percobaan
PRAKTIKUM GUI Event Handling
1. Tujuan a. Menerangkan komponen-komponen delegation event model b. Mengerti bagaimana delegation event model bekerja c. Menciptakan aplikasi GUI yang berinteraksi dengan user d. Mendiskusikan manfaat dari class-class adapter e. Mendiskusikan keuntungan-keuntungan dari menggunakan inner dan anonymous class 2. Latar Belakang Pada praktikum ini, kita akan mempraktekkan bagaimana mengendalikan events triggered ketika user berinteraksi dengan aplikasi GUI kita. Delegasi event model menguraikan bagaimana program kita dapat merespon interaksi dari user. Untuk memahami model, mari kita pelajari pertama-tama melalui tiga komponen utamanya. 1. Event Source The event source mengacu pada komponen GUI yang meng-generate event. Sebagai contoh, jika user menekan tombol, event source dalam hal ini adalah tombol. 2. Event Listener/Handler The event listener menerima berita dari event-event dan proses-proses interaksi user. Ketika tombol ditekan, listener akan mengendalikan dengan menampilkan sebuah informasi yang berguna untuk user. 3. Event Object Ketika sebuah event terjadi (misal, ketika user berinteraksi dengan komponen GUI), sebuah object event diciptakan. Object berisi semua informasi yang perlu tentang event yang telah terjadi. Informasi meliputi tipe dari event yang telah terjadi, seperti ketika mouse telah di-klik. Ada beberapa class event untuk kategori yang berbeda dari user action. Sebuah event object mempunyai tipe data mengenai salah satu class ini.
3. Percobaan
Percobaan 1 Mouse Event Demo: import java.awt.*; import java.awt.event.*; public class MouseEventsDemo extends Frame implements MouseListener, MouseMotionListener { TextField tf; public MouseEventsDemo(String title){ super(title); tf = new TextField(60); addMouseListener(this); } public void launchFrame() { /* Menambah komponen pada frame */ add(tf, BorderLayout.SOUTH); setSize(300,300); setVisible(true); } public void mouseClicked(MouseEvent me) { String msg = "Mouse clicked."; tf.setText(msg); } public void mouseEntered(MouseEvent me) { String msg = "Mouse entered component."; tf.setText(msg); } public void mouseExited(MouseEvent me) { String msg = "Mouse exited component."; tf.setText(msg); } public void mousePressed(MouseEvent me) { String msg = "Mouse pressed."; tf.setText(msg); } public void mouseReleased(MouseEvent me) { String msg = "Mouse released."; tf.setText(msg); } public void mouseDragged(MouseEvent me) { String msg = "Mouse dragged at " + me.getX() + "," +me.getY(); tf.setText(msg); } public void mouseMoved(MouseEvent me) { String msg = "Mouse moved at " + me.getX() + "," + me.getY(); tf.setText(msg); } public static void main(String args[]) { MouseEventsDemo med = new MouseEventsDemo("Mouse Events Demo"); med.launchFrame(); } }
Hasil Percobaan
Percobaan 2 Close Frame:
import java.awt.*; import java.awt.event.*; class CloseFrame extends Frame implements WindowListener { Label label; CloseFrame(String title) { super(title); label = new Label("Close the frame."); this.addWindowListener(this); } void launchFrame() { setSize(300,300); setVisible(true); } public void windowActivated(WindowEvent e) { } public void windowClosed(WindowEvent e) { } public void windowClosing(WindowEvent e) { setVisible(false); System.exit(0); } public void windowDeactivated(WindowEvent e) { } public void windowDeiconified(WindowEvent e) { } public void windowIconified(WindowEvent e) { } public void windowOpened(WindowEvent e) { } public static void main(String args[]) { CloseFrame cf = new CloseFrame("Close Window Example"); cf.launchFrame(); } }
Hasil Percobaan
Percobaan 3 Close Frame dengan Command Listener tertentu:
import java.awt.*; import java.awt.event.*; class CloseFrame extends Frame{ Label label; CFListener w = new CFListener(this); CloseFrame(String title) { super(title); label = new Label("Close the frame."); this.addWindowListener(w); } void launchFrame() { setSize(300,300); setVisible(true); } public static void main(String args[]) { CloseFrame cf = new CloseFrame("Close Window Example"); cf.launchFrame(); } } class CFListener extends WindowAdapter{ CloseFrame ref; CFListener( CloseFrame ref ){ this.ref = ref; } public void windowClosing(WindowEvent e) { ref.dispose(); System.exit(1); } }
Hasil Percobaan
Percobaan 4 Close Frame dengan Inner Class:
import java.awt.*; import java.awt.event.*; class CloseFrame extends Frame{ Label label; CloseFrame(String title) { super(title); label = new Label("Close the frame."); this.addWindowListener(new CFListener()); } void launchFrame() { setSize(300,300); setVisible(true); } class CFListener extends WindowAdapter { @Override public void windowClosing(WindowEvent e) { dispose(); System.exit(1); } } public static void main(String args[]) { CloseFrame cf = new CloseFrame("Close Window Example"); cf.launchFrame(); } }
Hasil Percobaan
Percobaan 5 Anonymous Inner class:
import java.awt.*; import java.awt.event.*; class CloseFrame extends Frame{ Label label; CloseFrame(String title) { super(title); label = new Label("Close the frame."); this.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e){ dispose(); System.exit(1); } }); } void launchFrame() { setSize(300,300); setVisible(true); } public static void main(String args[]) { CloseFrame cf = new CloseFrame("Close Window Example Anonymous Inner class"); cf.launchFrame(); } }
Hasil Percobaan
PRAKTIKUM THREAD
1. Tujuan a. Mendefiniskan threads b. Mengerti perbedaan state dalam threads c. Mengerti konsep prioritas dalam threads d. Mengetahui bagaimana menggunakan method didalam class Thread e. Membuat sendiri sebuah thread f. Menggunakan sinkronisasi pada thread yang bekerja bersama-sama dan saling bergantung satu dengan yang lainya g. Memungkinkan thread untuk dapat berkomunikasi dengan thread lain yang sedang berjalan h. Mengerti dan menggunakan kemampuan concurency 2. Latar Belakang Sebelumnya kita terbiasa untuk membuat program yang berururutan/sekuensial. Sebuah program sekuensial berarti sebuah program yang hanya memiliki satu aliran eksekusi. Setiap eksekusi, ia memiliki sebuah titik awal eksekusi, kemudian sebuah sekuen eksekusi, dan kemudian berakhir. Selama runtime, pasti hanya satu proses yang telah dieksekusi. Bagaimanapun juga, di dunia nyata, pasti dibutuhkan sesuatu yang dapat mengatur proses yang terjadi dan berjalan bersama-sama.Oleh karena itu, thread hadir untuk menjadi solusi dalam mengatasi permasalahan tersebut.Sebuah thread merupakan sebuah pengontrol aliran program. Untuk lebih mudahnya, bayangkanlah thread sebagai sebuah proses yang akan dieksekusi didalam sebuah program tertentu. Penggunaan sistem operasi modern saat ini telah mendukung kemampuan untuk menjalankan beberapa program. Misalnya, pada saat Anda mengetik sebuah dokumen di komputer Anda dengan menggunakan text editor, dalam waktu yang bersamaan Anda juga dapat mendengarkan musik, dan surfing lewat internet di PC Anda. Sistem operasi yang telah terinstal dalam computer Anda itulah yang memperbolehkan Anda untuk menjalankan multitaskting. Seperti itu juga sebuah program (ibaratkan di PC Anda), ia juga dapat mengeksekusi beberapa proses secara bersama-sama(ibaratkan beberapa aplikasi berbeda yang bekerja pada PC Anda). Sebuah contoh aplikasi adalah HotJava browser yang memperbolehkan Anda untuk browsing terhadap suatu page, bersamaan dengan mendownload object yang lain, misalnya gambar, memainkan animasi, dan juga file audio pada saat yang bersamaan.
3. Percobaan
Percobaan 1 Counter Down Demo: import javax.swing.*; import java.awt.*; public class CountDownGUI extends JFrame { JLabel label; CountDownGUI(String title) { super(title); label = new JLabel("Start count!"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); getContentPane().add(new Panel(), BorderLayout.WEST); getContentPane().add(label); setSize(300,300); setVisible(true); } void startCount() { try { for (int i = 10; i > 0; i--) { Thread.sleep(1000); label.setText(i + ""); } Thread.sleep(1000); label.setText("Count down complete."); Thread.sleep(1000); } catch (InterruptedException ie) { } label.setText(Thread.currentThread().toString()); } public static void main(String args[]) { CountDownGUI cdg = new CountDownGUI("Count down GUI"); cdg.startCount(); } }
Hasil Percobaan
Percobaan 2 Menulis Object Threads sebanyak 100 x:
class PrintNameThread extends Thread{ PrintNameThread(String name) { super(name); // menjalankan thread dengan satu kali instantiate start(); } @Override public void run() { String name = getName(); for (int i = 0; i < 100; i++) { System.out.print(name); } } class thread { public thread() { } } } class TestThread { public static void main(String args[]) { PrintNameThread pnt1 = new PrintNameThread("A"); PrintNameThread pnt2 = new PrintNameThread("B"); PrintNameThread pnt3 = new PrintNameThread("C"); PrintNameThread pnt4 = new PrintNameThread("D"); } }
Hasil Percobaan
init: deps-jar: compile-single: run-single: ABBBBBBBBBBBBBBBBBBBBBBDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD DDDDDDDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB CCCCCCCCCBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCBUILD SUCCESSFUL (total time: 0 seconds)
Percobaan 3 Implementasi interface Runnable:
class PrintNameThread2 implements Runnable { Thread thread; PrintNameThread2(String name) { thread = new Thread(this, name); thread.start(); } public void run() { String name = thread.getName(); for (int i = 0; i < 100; i++) { System.out.print(name); } } } class TestThread { public static void main(String args[]) { new PrintNameThread2("A"); new PrintNameThread2("B"); new PrintNameThread2("C"); new PrintNameThread2("D"); } }
Hasil Percobaan
init: deps-jar: compile-single: run-single: AAAAAAAAAAAABDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUILD SUCCESSFUL (total time: 0 seconds)
Percobaan 4 Contoh penggunaan method Join:
class PrintNameThread3 implements Runnable { Thread thread; PrintNameThread3(String name) { thread = new Thread(this, name); thread.start(); } public void run() { String name = thread.getName(); for (int i = 0; i < 100; i++) { System.out.print(name); } } } class TestThread { public static void main(String args[]) { PrintNameThread3 pnt1 = new PrintNameThread3("A"); PrintNameThread3 pnt2 = new PrintNameThread3("B"); PrintNameThread3 pnt3 = new PrintNameThread3("C"); PrintNameThread3 pnt4 = new PrintNameThread3("D"); System.out.println("Running threads..."); try { pnt1.thread.join(); pnt2.thread.join(); pnt3.thread.join(); pnt4.thread.join(); } catch (InterruptedException ie) { } System.out.println("Threads killed."); //dicetak terakhir } }
Hasil Percobaan
init: deps-jar: compile-single: run-single: AAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAADCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDDDDDDDD DDDDDDDDDDDDDDDDDDDDDDDCCCCCCCCCCCCCCCCCCCDDDDDDDDDDDDDDDD DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDBUILD SUCCESSFUL (total time: 0 seconds)
Percobaan 5 Mencetak String tanpa sinkronisasi:
class TwoStrings { static void print(String str1, String str2) { System.out.print(str1); try { Thread.sleep(500); } catch (InterruptedException ie) { } System.out.println(str2); } } class PrintStringsThread implements Runnable { Thread thread; String str1, str2; PrintStringsThread(String str1, String str2) { this.str1 = str1; this.str2 = str2; thread = new Thread(this); thread.start(); } public void run() { TwoStrings.print(str1, str2); } } class TestThread { public static void main(String args[]) { new PrintStringsThread("Hello ", "there."); new PrintStringsThread("How are ", "you?"); new PrintStringsThread("Thank you ", "very much!"); } }
Hasil Percobaan
Percobaan 6 Sinkronisasi pertama:
class TwoStrings2 { synchronized static void print(String str1, String str2) { System.out.print(str1); try { Thread.sleep(500); } catch (InterruptedException ie) { } System.out.println(str2); } } class PrintStringsThread implements Runnable { Thread thread; String str1, str2; PrintStringsThread(String str1, String str2) { this.str1 = str1; this.str2 = str2; thread = new Thread(this); thread.start(); } public void run() { TwoStrings.print(str1, str2); } } class TestThread { public static void main(String args[]) { new PrintStringsThread("Hello ", "there."); new PrintStringsThread("How are ", "you?"); new PrintStringsThread("Thank you ", "very much!"); } }
Hasil Percobaan
Percobaan 7 Sinkronisasi kedua:
class TwoStrings3 { static void print(String str1, String str2) { System.out.print(str1); try { Thread.sleep(500); } catch (InterruptedException ie) { } System.out.println(str2); } } class PrintStringsThread implements Runnable { Thread thread; String str1, str2; TwoStrings ts; PrintStringsThread(String str1, String str2, TwoStrings ts) { this.str1 = str1; this.str2 = str2; this.ts = ts; thread = new Thread(this); thread.start(); } public void run() { synchronized (ts) { TwoStrings.print(str1, str2); } } } class TestThread { public static void main(String args[]) { TwoStrings ts = new TwoStrings(); new PrintStringsThread("Hello ", "there.", ts); new PrintStringsThread("How are ", "you?", ts); new PrintStringsThread("Thank you ", "very much!", ts); } }
Hasil Percobaan
Percobaan 8 Produser-Consumer Test:
class SharedData { int data; synchronized void set(int value) { System.out.println("Generate " + value); data = value; } synchronized int get() { System.out.println("Get " + data); return data; } } class Producer implements Runnable { SharedData sd; Producer(SharedData sd) { this.sd = sd; new Thread(this, "Producer").start(); } public void run() { for (int i = 0; i < 10; i++) { sd.set((int)(Math.random()*100)); } } } class Consumer implements Runnable { SharedData sd; Consumer(SharedData sd) { this.sd = sd; new Thread(this, "Consumer").start(); } public void run() { for (int i = 0; i < 10 ; i++) { sd.get(); } } } class TestProducerConsumer { public static void main(String args[]) throws Exception { SharedData sd = new SharedData(); new Producer(sd); new Consumer(sd); } }
Hasil Percobaan
Percobaan 9 Produser-Consumer Test Modifikasi:
class SharedData2 { int data; boolean valueSet = false; synchronized void set(int value) { if (valueSet) { //baru saja membangkitkan sebuah nilai try { wait(); } catch (InterruptedException ie) { } } System.out.println("Generate " + value); data = value; valueSet = true; notify(); } synchronized int get() { if (!valueSet) { //produsen belum men-set sebuah nilai try { wait(); } catch (InterruptedException ie) { } } System.out.println("Get " + data); valueSet = false; notify(); return data; } } /* Bagian kode ini tidak ada yang berubah*/ class Producer implements Runnable { SharedData sd; Producer(SharedData sd) { this.sd = sd; new Thread(this, "Producer").start(); } public void run() { for (int i = 0; i < 10; i++) { sd.set((int)(Math.random()*100)); } } } class Consumer implements Runnable { SharedData sd; Consumer(SharedData sd) { this.sd = sd; new Thread(this, "Consumer").start(); } public void run() { for (int i = 0; i < 10 ; i++) { sd.get(); } } } class TestProducerConsumer { public static void main(String args[]) throws Exception { SharedData sd = new SharedData(); new Producer(sd); new Consumer(sd); } }
Hasil Percobaan
PRAKTIKUM JARINGAN
1. Tujuan a. Mengerti konsep dasar jaringan • IP address • protokol • ports • client/server • socket b. Membuat aplikasi menggunakan paket jaringan Java • ServerSocket • Socket • MulticastSocket • DatagramPacket 2. Latar Belakang Java mengijinkan anda untuk mempermudah mengembangkan aplikasi yang mengerjakan berbagai pekerjaan melalui jaringan. Ini adalah suatu cita-cita pembuatan Java yang menjadi salah satu kekuatan Java sejak dibuat dengan internet di dalam cita-cita. Sebelum mempelajari tentang jaringan dalam Java. Pertama-tama anda akan diperkenalkan kepada beberapa konsep dasar jaringan. Jika sebelumnya anda suda mengetahui, internet adalah jaringan global dengan berbagai jenis komputer yang berbeda yang tersambung dalam berbagai jalan. Walaupun terdapat perbedaan dalam software dan hardware yang disambung bersama, hal tersebut sangatlah bagus dimana internet masih berfungsi. Hal ini memungkinkan karena standar komunikasi memiliki ketetapan dan juga keselarasan. Standar ini menjamin kesesuaian dan kekuatan komunikasi diantara luasnya sistem pada internet.
3. Percobaan Percobaan 1 Koneksi Server: import java.net.*; import java.io.*; public class Networking01 { public static void main(String [] args) { ServerSocket server = null; Socket client; try { server = new ServerSocket(1234); //1234 is an unused port number } catch (IOException ie) { System.out.println("Cannot open socket."); System.exit(1); } while(true) { try { client = server.accept(); OutputStream clientOut = client.getOutputStream(); PrintWriter pw = new PrintWriter(clientOut, true); InputStream clientIn = client.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(clientIn)); pw.println(br.readLine()); } catch (IOException ie) { } } } }
Hasil Percobaan
Percobaan 2 Koneksi Client: import java.io.*; import java.net.*; public class Networking02 { public static void main(String args[]) { try { //Socket client = new Socket("133.0.0.1", 1234); Socket client = new Socket(InetAddress.getLocalHost(), 1234); InputStream clientIn = client.getInputStream(); OutputStream clientOut = client.getOutputStream(); PrintWriter pw = new PrintWriter(clientOut, true); BufferedReader br = new BufferedReader(new InputStreamReader(clientIn)); BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Type a message for the server: "); pw.println(stdIn.readLine()); System.out.println("Server message: "); System.out.println(br.readLine()); pw.close(); br.close(); client.close(); } catch (ConnectException ce) { System.out.println("Cannot connect to the server."); } catch (IOException ie) { System.out.println("I/O Error."); } } }
Hasil Percobaan
PRAKTIKUM APPLET 1. Tujuan a. Mendefinisikan apa yang dimaksud dengan applet b. Membentuk applet anda sendiri c. Mengetahui siklus yang terdapat pada applet • init • start • stop • destroy d. Menggunakan methods applet yang lain • paint • showStatus • Methods untuk memainkan sebuah audio clip e. Memahami html tag pada applet 2. Latar Belakang Applets adalah satu dari fitur yang paling menarik dalam java. Applet merupakan program yang Anda jalankan melalui web browser. Anda akan belajar tentang membentuk applet pada pembelajaran ini. Sebuah applet adalah tipe yang spesial dari program java yang dieksekusi melalui internet. Secara khusus berjalan pada suatu web browser seperti Netscape Navigator, Mozilla, atau Microsoft Internet Explorer. Bagaimanapun, jika dibandingkan dengan aplikasi Java yang normal, tidak diijinkan mengakses applet pada komputer yang mana dijalankan untuk alasan keamanan. Applet ini cukup terbatas jika dibandingkan dengan aplikasi java. Pada module ini, Anda akan mempelajari tentang membuat applet menggunakan AWT.
3. Percobaan Percobaan 1 String Hello World: import java.awt.*; import java.applet.*; /* masukkan bagian ini dalam kode html
*/ public class AppletDemo extends Applet { @Override public void paint(Graphics g) { g.drawString("Hello world!", 80, 25); } }
Hasil Percobaan
Percobaan 2 Life Cycle Demo: import java.applet.*; import java.awt.*; /*
*/ class LifeCycleDemo extends Applet { String msg =""; public void init() { msg += "initializing... "; repaint(); } public void start() { msg += "starting... "; repaint(); } public void stop() { msg += "stopping... "; repaint(); } public void destroy() { msg += "preparing for unloading..."; repaint(); } public void paint(Graphics g) { g.drawString(msg, 15, 15); } }
Hasil Percobaan
Percobaan 3 Menampilkan ShowStatus: import java.awt.*; import java.applet.*; /*
*/ public class AppletDemo2 extends Applet { @Override public void paint(Graphics g) { g.drawString("Hello world!", 80, 25); showStatus("This is an important information."); } }
Hasil Percobaan
Percobaan 4 Memainkan file audio: import java.awt.*; import java.applet.*; /*
*/ public class AudioApplet extends Applet { AudioClip ac; public void init() { try { /*audio clip tersimpan dalam direktori yang sama seperti kode javanya*/ /* spaceMusic telah terdownload dari java.sun.com */ ac = getAudioClip(getCodeBase(), "spaceMusic.au"); ac.loop(); } catch (Exception e) { System.out.println(e); } } public void stop() { ac.stop(); } public void paint(Graphics g) { g.drawString("Playing space music!", 80, 25); } }
Hasil Percobaan
Percobaan 5 Menampilkan String HelloWorld dengan parameter: import java.awt.*; import java.applet.*; /*
*/ public class ParamDemo extends Applet { @Override public void paint(Graphics g) { g.drawString(getParameter("myParam"), 80, 25); } }
Hasil Percobaan
PRAKTIKUM I/O STREAM LANJUTAN 1. Tujuan a. Tahu tipe-tipe stream yang umum digunakan b. Menggunakan class File dan methodnya • Karakter dan Stream byte • Input dan Output Streams • Node dan Filter Streams c. Menggunakan class-class Input/Output yang berbeda • Reader • Writer • InputStream • OutputStream d. Memahami konsep dari stream chaining e. Mendefinisikan serialisasi f. Memahami penggunaan dari kata kunci transient g. Menulis dan membaca dari sebuah object stream 2. Latar Belakang Tipe-Tipe Stream yang Umum Digunakan Stream Karakter dan Byte Seperti yang elah disebutkan sebelumnya, secara umum ada dua tipe dari stream, yaitu stream karakter dan byte. Kita hanya mengulang perbedaan mendasar antara keduanya. Stream byte adalah abstraksi file atau alat untuk data biner sedangkan stream karakter adalah untuk karakter Unicode. Class InputStream adalah abstraksi class root untuk semua input stream byte sedangkan class OutputStream adalah class root abstraksi dari semua output stream byte. Untuk stream karakter, superclasss yang sesuai dari semua class-class secara berturut-turut adalah class Reader dan the Writer. Kedua class-class ini adalah abstraksi class-class untuk membaca dan menulis stream karakter. Input dan Output Stream Stream juga dikategorikan berdasarkan apakah mereka digunakan untuk membaca atau menulis stream.Walaupun ini sudah cukup nyata, izinkan saya untuk mendefinisikan tipe stream ini. Anda diijinan untuk membaca dari input stream tapi tidak menulisnya. Di lain pihak, Anda diijinkan untuk menulis output streams tapi tidak membacanya. Class InputStream dan class Reader adalah superclass-superclass dari semua input stream. Class OutputStream dan class Writer adalah class-class root dari semua output stream. Input stream juga dikenal sebagai stream sumber (source stream) sejak kita memperoleh informasi dari stream ini. sementara itu output stream disebut juga stream hasil(sink stream). Node dan Stream Filter
Kini package java.io membedakan antara node dan stream filter. Sebuah stream node adalah sebuah stream dengan fungsi dasar berupa fungsi membaca atau menulis dari sebuah lokasi khusus seperti pada disk atau dari jaringan. Tipe-tipe dari stream node terdiri atas file, memory dan jalur data. Stream filter, di lain pihak, diletakkan pada layer stream node diantara threads atau proses untuk menyediakan fungsi tambahan yang tidak dapat ditemukan dalam stream node oleh stream node itu sendiri. Penambahan lapisan pada sebuah stream node disebut dengan stream chaining. Sesi ini berturutturut mempunyai sebuah tujuan dariclass-class stream yang berbeda. Untuk melengkapi daftar dari class-class ini, silahkan melihat dokumentasi Java's API.
3. Percobaan Percobaan 1 Informasi File atau Folder: import java.io.*; public class IO01 { public static void main(String args[]) { String fileName = “MUNZIR.txt”; File fn = new File(fileName); System.out.println("Name: " + fn.getName()); if (!fn.exists()) { System.out.println(fileName + " does not exists."); /* membuat sebuah temporary directory . */ System.out.println("Creating temp directory..."); fileName = "temp"; fn = new File(fileName); fn.mkdir(); System.out.println(fileName + (fn.exists()? "exists": "does not exist")); System.out.println("Deleting temp directory..."); fn.delete(); System.out.println(fileName + (fn.exists()? "exists": "does not exist")); return; } System.out.println(fileName + " is a " + (fn.isFile()? "file." :"directory.")); if (fn.isDirectory()) { String content[] = fn.list(); System.out.println("The content of this directory:"); for (int i = 0; i < content.length; i++) { System.out.println(content[i]); } } if (!fn.canRead()) { System.out.println(fileName + " is not readable."); return; } System.out.println(fileName + " is " + fn.length() + " bytes long."); System.out.println(fileName + " is " + fn.lastModified() + " bytes long."); if (!fn.canWrite()) { System.out.println(fileName + " is not writable."); } } }
Hasil Percobaan
Percobaan 2 File Terkopi: import java.io.*; class IO02 { void copy(String input, String output) { FileReader reader; FileWriter writer; int data; try { reader = new FileReader(input); writer = new FileWriter(output); while ((data = reader.read()) != -1) { writer.write(data); } reader.close(); writer.close(); } catch (IOException ie) { ie.printStackTrace(); } } public static void main(String args[]) { String inputFile = “boolean.txt”; String outputFile = “MUNZIR.txt”; CopyFile cf = new CopyFile(); cf.copy(inputFile, outputFile); } }
Hasil Percobaan
Percobaan 3 File Terkopi: import java.io.*; class IO03 { void copy(String input, String output) { BufferedReader reader; BufferedWriter writer; String data; try { reader = new BufferedReader(new FileReader(input)); writer = new BufferedWriter(new FileWriter(output)); while ((data = reader.readLine()) != null) { writer.write(data, 0, data.length()); } reader.close(); writer.close(); } catch (IOException ie) { ie.printStackTrace(); } } public static void main(String args[]) { String inputFile = “Boolean.txt”; String outputFile = “MUNZIR.txt”; CopyFile cf = new CopyFile(); cf.copy(inputFile, outputFile); } }
Hasil Percobaan
Percobaan 4 File Terkopi: import java.io.*; class IO04 { void copy(String input, String output) { FileInputStream inputStr; FileOutputStream outputStr; int data; try { inputStr = new FileInputStream(input); outputStr = new FileOutputStream(output); while ((data = inputStr.read()) != -1) { outputStr.write(data); } inputStr.close(); outputStr.close(); } catch (IOException ie) { ie.printStackTrace(); } } public static void main(String args[]) { String inputFile = “boolean.txt”; String outputFile = “MUNZIR.txt”; CopyFile cf = new CopyFile(); cf.copy(inputFile, outputFile); } }
Hasil Percobaan
Percobaan 5 Character Dari File tercetak: import java.io.*; class CopyFile { void copy(String input) { PushbackInputStream inputStr; PrintStream outputStr; int data; try { inputStr = new PushbackInputStream(new FileInputStream(input)); outputStr = new PrintStream(System.out); while ((data = inputStr.read()) != -1) { outputStr.println("read data: " + (char) data); inputStr.unread(data); data = inputStr.read(); outputStr.println("unread data: " + (char) data); } inputStr.close(); outputStr.close(); } catch (IOException ie) { ie.printStackTrace(); } } public static void main(String args[]) { String inputFile = “MUNZIR.txt”; CopyFile cf = new CopyFile(); cf.copy(inputFile); } }
Hasil Percobaan
Percobaan 6 Terbentuk File Boolean.ser: import java.io.*; public class SerializeBoolean { SerializeBoolean() { Boolean booleanData = new Boolean("true"); try { FileOutputStream fos = new FileOutputStream("boolean.ser"); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(booleanData); oos.close(); } catch (IOException ie) { ie.printStackTrace(); } } public static void main(String args[]) { SerializeBoolean sb = new SerializeBoolean(); } }
Hasil Percobaan
Percobaan 7 Unserialized Boolean: import java.io.*; public class UnserializeBoolean { UnserializeBoolean() { Boolean booleanData = null; try { FileInputStream fis = new FileInputStream("boolean.ser"); ObjectInputStream ois = new ObjectInputStream(fis); booleanData = (Boolean) ois.readObject(); ois.close(); } catch (Exception e) { e.printStackTrace(); } System.out.println("Unserialized Boolean from " + "boolean.ser"); System.out.println("Boolean data: " + booleanData); System.out.println("Compare data with true: " + booleanData.equals(new Boolean("true"))); } public static void main(String args[]) { UnserializeBoolean usb = new UnserializeBoolean(); } }
Hasil Percobaan