Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
KiadtaCsaba Orsós Megváltozta több, mint 10 éve
1
1 Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz e-mail: fandrew@mit.bme.hu tárgy honlap: http://home.mit.bme.hu/~fandrew/szofttech_hu.html
2
2 Kivételkezelés I. szokatlan, váratlan esemény - hibakezelés cél: robosztus program, hiba esetén ne álljon le hagyományos hibakezelés: nehézkes, komplex kód pl. C programban függvények visszatérési értéke visszaterjesztés a hívónak több szinten keresztül nehezen karbantartható
3
3 Kivételkezelés II. alapelv: funkcionális részeket és a hibakezelést különválasztani! try-catch-finally blokk kivétel eldobása: throw new MyOwnException() amiket tovább akarunk dobni: throws Throwable class: Exception és Error class RuntimeException és Error kitüntetett
4
4 Kivételkezelés – példa class MyException extends Exception { MyException(String s) { super(s); } } … static int readData() throws MyException, java.io.IOException { … } … public static void main(String[] args) { try { int d = readData(); … } catch (MyException me) { System.err.println(“MyException hiba: “ + me); } catch (java.io.IOException ioe) { System.err.println(“IOException hiba: “ + ioe); }
5
5 GUI: AWT és Swing AWT (java.awt) – Abstract Window Toolkit Swing (javax.swing) – AWT v2 komponensek és konténerek (folyamat-, adat-,) eseményvezérelt programozás eseménykezelés: esemény objektum: pl. MouseEvent esemény forrás objektum listener (hallgató) interfész: pl. MouseMotionListener adapter osztályok: pl. MouseMotionAdapter regisztrálás: pl. Component.addMouseMotionListener()
6
6 GUI: konténerek, komponensek ablakok: önálló ablak: JFrame, JDialog keret és önálló layout: JPanel bármi rajzolása: Canvas (AWT) egyszerű komponens: JLabel: szöveg JButton, JCheckbox, JRadioButton: gombok JComboBox, JList: többféle választás JMenuBar, JMenu, JMenuItem: menü komplex feladatok: JTable: (akár szerkeszthető) táblázat JFileChooser: file open / save / … dialog
7
7 LayoutManager http://java.sun.com/docs/books/tutorial/uiswing/layout/visual.html komponens méret megadása: setMaximumSize(), Preferred, Minimum meghatározza komponens helyét, méretét BorderLayout: North, E, W, S, Center BoxLayout: egy sorba vagy oszlopba FlowLayout: mint folyó szöveg GridLayout: négyzetrács (táblázat) GridBagLayout: táblázat, de flexibilis
8
8 GUI: rajzolás saját grafika: célszerűen Canvas, JPanel vagy JLabel paintComponent() felülírása, repaint() meghívása! rajzolás (alakzat, kitöltés, …) Graphics2D
9
9 GUI: rajzolás – példa class DominoPanel extends JPanel { // dominók állapota … public addDomino(Domino d) { // állapot változtatása … repaint(); } protected void paintComponent(Graphics g) { Graphics2D g2 = (Graphics2D)g; g2.setColor(Color.red); g2.drawLine(10, 10, 50, 50); … }
10
10 Párhuzamos programozás folyamat (process) és szál (thread) miért kellenek szálak? válaszadási képesség hosszú művelet (számolás, adatbázis) közben futó folyamatok leállíthatók legyenek háttérben futtatott feladat (pl. monitorozás, hálózati kommunikáció) Swing megköveteli beépített szál-kezelési képesség nyelvi szinten prioritások (Thread.MIN_PRIORITY… Thread.MIN_PRIORITY) példa: garbage collector (low priority, idle time)
11
11 Szálak szál implementálása: java.lang.Runnable interface java.lang.Thread osztály mindkettőnél: „public void run()” szál indítása: Thread.start(), nincs stop() ! join(): megvárja a szál befejeződését yield(): ütemezés – futás jogáról lemond szinkronizáció synchronized: objektumonként metódusok kölcsönös kizárása wait(), notify(), notifyAll()
12
12 Szálak – szál indítása class MyThread extends Thread { public void run() { … } } MyThread t = new MyThread(…); t.start(); VAGY class MyRunnable implements Runnable { public void run() {…} } MyRunnable r = new MyRunnable(…); new Thread(r).start();
13
13 Szálak – példa class Game extends Thread { private bool running = true; float x, y; public void run() { // inicializálás float dx = 0.1; while (running) { // objektumok mozgatása x += dx; // leállási feltétel ellenőrzése running =...; // várakozás a következő időszeletre (100ms) sleep(100); // throws InterruptedException! }
14
14 Szálak – szinkronizáció class MyThread extends Thread { private int state; synchronized setState(int s) { state = s; } synchronized getState() { return state; } hálózat beállíthatja, megjelenítés kiolvashatja párhuzamosan az állapotot
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.