1 / 41

Swing

Swing. malý náhľad do k ni žnice SWING, a pplet (J A pplet)/ aplikácia (J F rame), timer a v l ákna a SWING , tri m al é case studies: ( typu projekt , pr íklad na skúšku, ... ) podpisovanie appletu ( jarsigner, key tool ) , Literat úra (swing) :

binh
Télécharger la présentation

Swing

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Swing • malý náhľad do knižnice SWING, • applet (JApplet)/aplikácia (JFrame), • timer a vlákna a SWING, • tri malé case studies: (typu projekt, príklad na skúšku, ...) • podpisovanie appletu (jarsigner, keytool), Literatúra (swing): http://docs.oracle.com/javase/tutorial/uiswing/ http://www.javabeginner.com/java-swing-tutorial.htm Demo (swing nájdete v Javasdk/demo/jfc/SwingSet2): ilustruje množstvo GUI komponentov s tutoriálnym kódom, ktoré tu nebudeme rozoberať. Slúži na ilustráciu, a ako katalóg použitelného kódu. http://www.cs.duke.edu/csl/docs/java/demo/jfc/SwingSet2/SwingSet2.html SwingSet3 demo Cvičenia: príklad skúškovej úlohy

  2. Swing • štandard od Java 2 (1.2), • časť JFC (Java Foundations Classes) • “rozšírenie” knižnice awt, • komponenty sa volajú Jxxx, • vlastný look-and-feel, • rozšírená grafika JAVA2D, • použitie SWING: • javax.swing.* • javax.swing.event • použitie AWT (Abstract Window Toolkit): • java.awt.* • nemiešajte awt a swing komponenty !!! • knižnica swing obsahuje množstvo komponentov, v nasledujúcom • ilustrujeme podrobnejšie JButton, • prehľadovo niektoré ďalšie komponenty.

  3. AWT vs. SWING container JComponent JComponents (>30): AbstractButton, JColorChooser, JComboBox, JFileChooser, JLabel, JOptionPane, JPanel, JPopupMenu, JProgressBar, ... ... container Panel, ScrollPane components Button, Canvas, Checkbox, Choice, Label, List, Scrollbar, TextComponent zdroj: http://en.wikipedia.org/wiki/Swing_%28Java%29

  4. javax.swing Chýba tu Canvas ...

  5. JButton import java.awt.event.*; import java.awt.*; import javax.swing.*; public class JButtonDemo extends JApplet { JButton b1 = new JButton("JButton 1"), b2 = new JButton("JButton 2"); JTextField t = new JTextField(10); public void init() { ActionListener al = new ActionListener() { public void actionPerformed(ActionEvent e){ String name = ((JButton)e.getSource()).getText(); t.setText(name + " Pressed"); } }; setLayout(new FlowLayout()); b1.addActionListener(al); add(b1); b2.addActionListener(al); add(b2); add(t); } Jednoduchý príklad na ilustráciu podobnosti knižníc AWT/SWING. Button->JButton, TextField->JTextField, Applet->JApplet. Layouts a Listenery používame rovnako ako v AWT. Súbor:JButtonDemo.java

  6. Možnosti JButton ImageIcon leftButtonIcon = new ImageIcon(“HappyFace.gif”); . . . jb = new JButton("JButton", HappyFace), jb.setRolloverEnabled(true); jb.setRolloverIcon(ConfusedFace); jb.setPressedIcon(MiscFace); jb.setDisabledIcon(CryFace); jb.setToolTipText("Wow!"); jb2.setMnemonic(KeyEvent.VK_D); jb2.setActionCommand("disable"); • táto aplikácia ilustruje možnosti JButton oproti Button z AWT. JButton: • má ikony, hneď niekoľko druhov, • pressed, disabled, rollover, … • má tooltip (Wow!), • má hotkey (Alt-D), • cez actionCommand logickýmmenom previaže komponent a Listener public void actionPerformed(ActionEvent e) { if ("disable".equals(e.getActionCommand())) { jb2.setEnabled(false); jb.setEnabled(false); } . . . . Súbor:Smiles.java

  7. Čo vieme a platí to ďalej Ak chceme použiť nejaký JComponent JXXX: • musíme ho vytvoriť, t.j. btn = new JButton(“Quit”); • nastaviť jeho vlastnosti btn.setToolTipText("Bye!"); • ak je to kontajner, pridať doň všetky podradené komponenty, • pridať ho do nadradeného kontajnera, t.j. panel.add(btn);this.add(btn); • ak má reagovať, tak nastaviť mu listener, t.j. btn.addActionListener(…); • vytvor: • JFrame/JAppletJFramefr = new JFrame(“Hra”); • JPanelJPanel pan = new JPanel( ); • JComponentJButton btn = new JButton(“Quit”); • Listeneral = new ActionListener() • pridaj: • listener ku JComponentubtn.addActionListener(al); • JComponenty do JPanelupan.add(btn); • JPaneldo JFrame fr.setContentPane(pan); fr.show();

  8. Nemáme Canvas publicclass BezCanvasu extends JApplet { publicvoid init() { setLayout(new BorderLayout()); JPanelAkoCanvas jpac = new JPanelAkoCanvas(); add(jpac,BorderLayout.CENTER); JPanel buttons = new JPanel(); JButton goBtn = new JButton("Go!"); goBtn.addAction buttons.add(goBtn); JButton quitBtn = new JButton("Quit!");quitBtn.addAc buttons.add(quitBtn); add(buttons,BorderLayout.SOUTH); }} publicclass JPanelAkoCanvas extends JPanel { protectedvoid paintComponent(Graphics g) { for(int i = 0; i < getHeight(); i+= 3) g.drawLine(0, i, getWidth(), getHeight()-i); }} Súbor: BezCanvasu.java

  9. Hracia plocha hracia plocha je často šachovnica rôznych rozmerov. Ako ju implementujeme: • jeden veľký canvas/JPanel • musíme riešiť transformáciu pixelových súradníc do súradníc hracej plochy: • anaopak, v metóde paint/paintComponent[i,j] -> [x, y] • grid canvasov/JPanelov: • každý canvas/panel má svoje súradnice od [0,0] • každý canvas/panel má svoj action/mouse listener • každý canvas panel má svoju metódu paint/paintComponent • veľkosť gridu upravíme podľa veľkosti obrázkov, resp. veľkosť obrázku upravíme podľa veľkosti panelu oldImg.getScaledInstance(newWidth,newHeight,Image.SCALE_DEFAULT); • grid buttonov/JButtonov: [e.x,e.y]->[1,1]

  10. JPexeso import javax.swing.*; import java.awt.*; Tento príklad ilustruje použitie komponentu JButton tam, kde sme minule použili Canvas. Namiesto drawImage do Canvasu, nastavujeme ikonu (ImageIcon) komponentu podtriedyJButton publicclass JPexeso extends JApplet { int size = 6; publicvoid init() { setLayout(new GridLayout(size,size)); for(int i = 0; i < size; i++) for(int j = 0; j < size; j++) add(new JPexesoCard(this, i,j)); } } • aplikácia JPexeso je analógia Pexesa z minulej prednášky, • do mriežky veľkosti size x size umiestnime objekty triedy JPexesoCard (JButton), • JPexesoCard si odchytáva udalosti Súbor: JPexeso.java

  11. JPexesoCard public class JPexesoCard extends JButton implements ActionListener { final static String[] pika = {"pk000010.gif", …, "pk000730.gif "}; int i, j;// pozícia na hracej ploche boolean visible = false; //stav: odkrytá, neodkrytá JPexeso ap; //referencia do nadradeného JAppletu JPexesoCard (JPexeso ap, int i, int j) { // konštruktor this.i = i; this.j = j; this.ap = ap; addActionListener(this); } public void actionPerformed(ActionEvent e) { visible = !visible; setIcon(visible?new ImageIcon("images/"+pika[i+j]):null); } //Image to ImageIcon: ImageIcon icn = new ImageIcon(image); } // ImageIcon to Image: Image img = icn.getImage(); • JPexesoCard si pamätá • súradnice na hracej ploche [i,j], • stav (odkrytá, neodkrytá katra) [visible]. • podľa stavu nastaví ikonu JButtonu Súbor: JPexesoCard.java

  12. JFrame JLabel JLabel JFrame JPanel: FlowLayout North JPanel: BorderLayout Center South JPanel: GridLayout JPanel: FlowLayout JButton JButton JButton

  13. JFrame import java.awt.*; import java.awt.event.*; import javax.swing.*; publicclass JApplet2JFrame { publicstaticvoid put(JApplet jp, int width, int height) { JFrame frame = new JFrame(jp.getClass().toString()); // pomenuj frame frame.addWindowListener(new WindowAdapter() { // menom triedy publicvoid windowClosing(WindowEvent e){ // ošetri Frame-close event System.exit(0); } }); frame.getContentPane().add(jp, BorderLayout.CENTER);// vlož JPanel do JFrame frame.setSize(width, height);// nastav veľkosť frame.setVisible(true);// zobrazJFrame naobrazovke } } publicclass JPexesoFrame { publicstaticvoid main(String[] args) { JApplet applet = new JPexeso(); applet.init(); applet.start(); JApplet2JFrame.put(applet,300,300); } } z JAppletu/JPanelu vieme vyrobiť JFrame (aplikáciu) Súbor:JApplet2JFrame.java Súbor:JPexesoFrame.java

  14. import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.io.*; public class MiniEditor extends JFrame { static JTextArea ta = new JTextArea(20,10); public MiniEditor() { super("minieditor"); JPanel buttons = new JPanel(); JButton b; buttons.setLayout(new GridLayout(6,1)); b = new JButton("Load"); buttons.add(b); b.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { loadFile(); }}); // … JPanel jp = new JPanel(); jp.setLayout(new BorderLayout()); jp.add("West",buttons); jp.add("Center", ta); add(jp); } public static void quit() {} static class WL extends WindowAdapter { public void windowClosing(WindowEvent e) { System.exit(0); } } public static void main(String[] args) { MiniEditor jf = new MiniEditor(); jf.addWindowListener(new WL()); jf.setSize(400,300); jf.setVisible(true); } } import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.io.*; public classMiniEditor extends JFrame { static JTextArea ta = new JTextArea(20,10); publicMiniEditor() { super("minieditor"); JPanel buttons = new JPanel(); JButton b; buttons.setLayout(new GridLayout(6,1)); b = new JButton("Load"); buttons.add(b); b.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { loadFile(); }}); // save, cut, copy, paste, quit JPanel jp = new JPanel(); jp.setLayout(new BorderLayout()); jp.add("West",buttons); jp.add("Center", ta); add(jp); } Minieditor • MiniEditor je BorderLayout, v ktorého West časti je grid ovládacích gombíkov. V strede je JTextArea, ktorý pozná metódy: • cut(), • copy(), • paste(). • Okrem toho aplikácia ilustruje: • showOpenDialog ako metódu pre Load gombík, viď loadFile(), • showSaveDialog pre Save gombík, viď saveFile(). Súbor: MiniEditor.java

  15. loadFile() ilustruje JFileChooser: • showOpenDialog metódu, • getSelectedFile(), • JOptionPane poskytuje štandardné dialógové okná: • showMessageDialog, • showConfirmDialog, • showMessageDialog, • showOptionDialog. public voidloadFile() { JFileChooser fc = new JFileChooser(); if (fc.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) { File f = fc.getSelectedFile();// vybratý súbor try { ta.read(new FileReader(f), null);// otvor na čítanie } catch (Exception e) {// ak je problém, otvor dialog box JOptionPane.showMessageDialog(this,"cannot open for read:"+f.getName()); } } } Súbor: MiniEditor.java

  16. Menu JMenuBar mb = new JMenuBar(); JMenu fileMenu = new JMenu("File"); JMenuItem mi; mi = new JMenuItem("Load"); mi.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { loadFile(); }}); fileMenu.add(mi); mi = new JMenuItem("Save"); mi.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { saveFile(); }}); fileMenu.add(mi); mb.add(fileMenu); JMenu editMenu = new JMenu("Edit"); .... setJMenuBar(mb); • Menu: • JMenuBar alebo • JPopupMenu. • Menu tvoríme pomocou: • add(JMenu). • JMenu naplníme pomocou: • add(JMenuItem) • addSeparator • JMenuItem prívesíme: • addActionListener Súbor:MiniEditor1.java

  17. Popup menu JPopupMenu popup = new JPopupMenu(); JMenuItem m = new JMenuItem("Cut"); m.addActionListener(cutAl); popup.add(m); m = new JMenuItem("Copy"); m.addActionListener(copyAl); popup.add(m); m = new JMenuItem("Paste"); m.addActionListener(pasteAl); popup.add(m); popup.addSeparator(); m = new JMenuItem("Nothing"); popup.add(m); PopupAdapterpl = newPopupAdapter(); addMouseListener(pl); // podľa toho, kde chceme aby menu reagovalo ta.addMouseListener(pl); // tam pripojíme MouseListener class PopupAdapter extends MouseAdapter { public void mousePressed(MouseEvent e) { if(e.isPopupTrigger()) { popup.show( e.getComponent(), e.getX(), e.getY()); } } } JScrollPane jsp = new JScrollPane(); // scrolovanie jsp.getViewport().add(ta); add("Center",jsp);

  18. Case 1 private Image initOneSmiley(int theSadness) { Image off = createImage(faceSize, faceSize); Graphics g = off.getGraphics(); g.setColor(Color.black); g.fillRect(0, 0, faceSize, faceSize); g.setColor(baseColor); g.fill3DRect(1, 1, faceSize-2, faceSize-2, true); g.fill3DRect(2, 2, faceSize-4, faceSize-4, true); g.setColor(Color.yellow); g.fillOval(6, 6, faceSize-12, faceSize-12); g.setColor(Color.black); g.drawOval(6, 6, faceSize-12, faceSize-12); if (theSadness==sad) { g.drawArc(10, faceSize-13, faceSize-20, faceSize-20, 135, -100); } else if (theSadness==happy) { g.drawArc(10, 10, faceSize-20, faceSize-20, -35, -100); } else { g.fillRect(12, faceSize-12, faceSize-23, 1); } g.fillOval(13, 13, 2, 2); g.fillOval(faceSize-12-2, 13, 2, 2); return off; } • Hra minesweeper (riešenie:A.D.Birrell). Celá hra je kreslená graficky, pre zaujímavosť si pozrite, ako maľuje usmievačíka/smutňáčika, resp. do dokonalosti dovedené maľovanie bomby s tieňom http://birrell.org/andrew/minesweeper/Minesweeper.java

  19. Case 2 • grafické dopracovanie projektu je dôležite, nepodceňujte ho ! • získa vám to body a nie je to v Jave  Zdroj: Lukáš Zdechovan

  20. Grafická príprava projektu

  21. Spracovanie v Jave Zdroj: Lukáš Zdechovan

  22. Simulácia Čo roller, to thread Problém, ako simulovať prirodzené brzdenie rollera

  23. Case 3 • zadanie Plumber z predtermínu 2008: • tri vzorové skúšky (zadania) visia na stránke predmetu • príklad ilustruje štruktúru skúšky: • čítanie konfigurácie hry súboru a vykreslenie plochy, konštrukcia appletu, 8 4 12345623 34613532 35216311 23654545 • ošetrenie udalostí a rozpohybovanie appletu v intenciách pravidiel danej hry, • počítanie a zobrazenie krokov, životov, časomiera, zistenie, či v danej konfigurácii už sme boli a pod, • load a save konfigurácie (serializácia), • algoritmus (napr. kam dotečie voda - hľadanie cesty v grafe (labyrinte), analýza víťaznej konfigurácie, ...)

  24. Plumber(inštalatér) Oddeľte GUI • kreslenie objektov, • komponentov, • appletu od logiky hry • analýza ťahov, • víťazná konfigurácia, • zacyklenie, ... • Plumber – appletBorder & Grid Layout, • PlumberCanvas - MouseListener,kreslenie rúr .png, • PlumberThread - časomiera, Súbor:Plubmer.java

  25. Plumber • čítanie obrázkov: for(int i=1; i<=8; i++) { img[i] = getImage(getCodeBase(),"plumber"+i+".png"); • ak vám nekreslí obrázok, pravdepodobne ste ho nenačítali správne, • najčastejšie nie je v správnom adresári • čítanie vstupnej konfigurácie try { File f = new File("Plumber.txt"); ... // čítanie textového súboru } catch (Exception E) { System.out.println("file does not exist"); } • nezanedbajte výnimky, • píšte na konzolu, čo čítate, • ak čítate vstup po znakoch, nezabudnite, že riadok končí znakmi 13, 10, • rozdiel medzi cifrou a jej ascii kódom je 48. • uloženie konfigurácie počas hry • najjednoduchšie pomocou serializácie (pozri prednášku java.io) • neserializujte celý applet, ale len triedu popisujúcu konfiguráciu hry Súbor:Plubmer.java

  26. 0,0 Plumber 70,70 • layout – rozvrhnite si plochu a navrhnite zodpovedajúce triedy/objekty setLayout(new BorderLayout()); Panel pg = new Panel(); pg.setLayout(new GridLayout(Height+2,Width)); pg.setSize((Height+2)*70,Width*70); for(int j=0; j<Height; j++) for(int i=0; i<Width; i++) pg.add(new PlumberCanvas(this,i,j,playGround[i][j])); add("Center",pg); Panel lbPanel = new Panel(); lbSteps = new Label("Steps: "); lbTime = new Label("Time: "); lbPanel.add(lbSteps); lbPanel.add(lbTime); add("North",lbPanel); sizex = Width*70; sizey = (Height+2)*70; resize(sizex,(Height+2)*70); Pt = new PlumberThread(this); Pt.start(); Súbor:Plubmer.java

  27. PlumberCanvas publicclass PlumberCanvas extends Canvas implements MouseListener { Plumber parent;// hlavný applet int sx, sy; // súradnice canvasu int state; // stav políčka public PlumberCanvas(Plumber p, int x, int y, int s) { … addMouseListener(this);// aby reagoval na myš } publicvoid paint(Graphics g) { // vykreslenie stavu if (stat>0) g.drawImage(parent.img[stat],0,0,Color.YELLOW,this); if (stat<0) g.drawImage(parent.img_blue[-stat],0,0,Color.YELLOW,this); } publicvoid mouseClicked( MouseEvent e ) {// zmena stavu } Súbor:PlubmerCanvas.java

  28. PlumberThread publicclass PlumberThread extends Thread { Plumber parent; public PlumberThread(Plumber ap) { parent = ap; } publicvoid run() { while (true) try { sleep(1000);// naivná časomiera parent.time++; parent.lbTime.setText("Time: "+parent.time); parent.lbTime.repaint(); } catch (Exception E) {} } } Súbor:PlubmerThread.java

  29. Škálovanie Naprogramujte mriežkuškálovatelnú od rozmeru okna (štvorcová mriežka sa rozťahuje podľa veľkosti okna, v ktorom sa nachádza, NIE KONŠTANTA V PROGRAME) private static int dist = 120; // počiatočné nastavenia private static int offset = dist; public void init() { setSize(offset+N*dist, offset+N*dist);// originálna veľkosť hracej pl. public void paint(Graphics g) { // nastavenia podľa aktuálnej //veľkosti okna offset = dist = (Math.min(getHeight(),getWidth()))/(N+1);

  30. Vlákna a SWING • knižnica SWING nie je thread-safe, t.j. len jedno vlákno môže modifikovať SWING objekty v GUI (to sa volá Event Dispatch Thread - EDT), • ak ovládate SWING komponenty z viacerých vlákien, nikto vám nezaručuje ich korektnú funkcionalitu (interferencia vlákien), • EDT si pridáva do fronty všetky udalosti od listenerov (myš, klávesnica, okná, ...), postupne ich realizuje, • EDT sa vykonáva, keď sa volá akákoľvek listener-metóda SWING objektu, a jedine v ňom môžeme korektne modifikovať SWING objekt, • fronta obsahuje veľa malých úloh, najčastejšie generovaných od listenerov na spracovanie udalostí • dlhé výpočty v rámci EDT (napr. niektorého listenera) spôsobia zasekávanie, resp. vytuhnutie aplikácie, kde a ako ich teda robiť ?

  31. Malý pokus publicvoid init() { setLayout(new FlowLayout()); add(lb); // JLabel lb = new JLabel("label"); add(jb);// JButton jb = new JButton("Klik"); jb.addActionListener(new ActionListener() { publicvoid actionPerformed(ActionEvent e) { System.out.println("Klik"); double a; for(int i=0; i<100000000; i++) a = Math.cos(Math.PI/45); System.out.println("Klak"); } }); public long cas; public void run() { while (true) { cas++; ap.lb.setText("cas:"+cas); ap.repaint(); } Súbor: JThreads, JTimer.java

  32. invokeAndWait vs.invokeLater • veľké veci robia extra vlákna (a nie kódy obsluhujúce eventy), • problém nastáva, ak tieto zároveň chcú ovládať GUI (to nesmú – nie sú v EDT) Dve plánovacie rutiny do fronty EDT zaradia malý runnable task: • SwingUtilities.invokeLater(runnable), • SwingUtilities.invokeAndWait(runnable), tento runnable task: • môže modifikovať SWING komponenty, • vykoná sa po tom, čo sú vykonané všetky už naplánované akcie v EDT, • invokeAndWait(runnable) je synchrónne – metóda skončí až po tom, čo runnable task sa vykoná • invokeLater(runnable) je asynchrónne – metóda skončí hneď po tom, ako sa zavolá, teda, vlákno, čo zavolá invokeLater(runnable), nečaká, kým sa kód runnable vykoná. Na zložitejšie veci treba naštudovať triedu SwingWorker http://docs.oracle.com/javase/6/docs/api/javax/swing/SwingWorker.html

  33. invokeLater public class JTimer extends Thread { JThreads ap; public long cas; public JTimer(JThreads ap) { this.ap = ap; } public void run() { while (true) { … výpočet ... SwingUtilities.invokeLater( new Runnable() { public void run() { System.out.println("runnable start"); ap.lb.setText("cas:"+cas); ap.repaint(); } }); System.out.println("after invoke"); } Súbor: JThread,JTimer.java

  34. Swing Timer • javax.swing.Timernie jejava.util.Timer • všetky úlohy všetkých swing.Timerov sa vykonajú v jednom vlákne, EDT • preto timertask nesmie vykonávať zložitý výpočet ActionListenertaskPerformer = newActionListener() { publicvoidactionPerformed(ActionEventevt) { cas++; ap.lb.setText("cas:"+cas); ap.repaint(); }; Timer timer = new Timer( 100 , taskPerformer); timer.setRepeats(false); timer.start(); • setDelay(milis) – čas medziodpáleniamitasku • setInitialDelay(milis) - čas predprvým odpálením tasku • setRepeats – opakujesa, default je true ! • start(), • stop() • restart(), • isRunning() http://docs.oracle.com/javase/tutorial/uiswing/misc/timer.html

  35. Pakovanie appletu do JARu • výsledný applet/projekt často obsahuje množstvo .class súborov, ktoré treba zakaždým natiahnúť do browsera. Na komprimáciu viacerých .class súborov používame formát .jar (java archive), a nástroj na komprimáciu .class súborov do .jar je súčasťou distribúcie jdk. jar cf MiniEditor2.jar MiniEditor2*.class • doplníme archive do applet tagu v MiniEditor2.html <head> <title> MiniEditor Example Applet </title> </head> <body> <applet code=“MiniEditor2.class" archive= "MiniEditor2.jar" width=200 height=150> </applet> </body>

  36. Generovanie certifikátu/kľúča • WritingApplet bol príklad appletu, ktorý chcel zapisovať u klienta, • MiniEditor chcel čítať a písať do filesystému, • pri pokuse spustiť takýto applet v browseri (appletvieweri) dostaneme security exception. ako na to: keytool -list - zoznam vygenerovaných kľúčov keytool -genkey -alias mykey-keystore <url>- vytvorí certifikát v .keystore Enter keystore password: manager{java.home}/lib/security/ What is your first and last name?c:\Document Settings\user\ [Unknown]: Peter Borovansky What is the name of your organizational unit? [Unknown]: FMFI What is the name of your organization? [Unknown]: UK BA What is the name of your City or Locality? [Unknown]: Bratislava What is the name of your State or Province? [Unknown]: Slovakia What is the two-letter country code for this unit? [Unknown]: SK Is CN=Peter Borovansky, OU=FMFI, O=UK BA, L=Bratislava, ST=Slovakia, C=SK correct? [no]: yes Enter key password for <mykey> (RETURN if same as keystore password): manager keytool -list Enter keystore password: manager Keystore type: jks Keystore provider: SUN Your keystore contains 1 entry mykey, 12.12.2011, keyEntry, Certificate fingerprint (MD5): B8:45:65:A1:DA:D8:F0:AF:46:AB:81:B5:46:83:CB:EA

  37. Podpisovanie appletu • keď máme (vygenerovaný) kľúč, popíšeme ním applet (jarsigner v jdk): jarsigner MiniEditor2.jar mykey Enter Passphrase for keystore: manager Warning: The signer certificate will expire within six months. • nakoniec pustíme HTMLConverter, skonvertuje MiniEditor2.html na príslušnú platformu a browser http://dai.fmph.uniba.sk/courses/JAVA/sources/12/MiniEditor2.html

  38. Alternatíva pre aplikácie • runnable jar file • po odladení projektu si vytvorte run configuration • export/Runnable JAR file vytvoríte súbor, ktorý sa dá samostatne spustiť.

  39. Total-Prémie Top 10

  40. IPSC pozvánka http://ipsc.ksp.sk/ Prémiové body (umiestnenie v open division): (počet tímov-vaše umiestnenie)/20 pre každého člena tímu (max.traja v tíme) • IPSC 2014 will take place from 15 June 2014, 11:00 UTC to 15 June 2014, 16:00. • The practice session runs from 14 June 2014, 8:00 UTC to 15 June 2014, 8:00. • Google Code Jam • http://code.google.com/codejam • ACM Programming Contest • http://en.wikipedia.org/wiki/ACM_International_Collegiate_Programming_Contest • Topcoder • http://www.topcoder.com/

  41. Ako ďalej(ako nás stretnúť/nestretnúť) JAVA2 (PavelPetrovič)alias Java EE • http://dai.fmph.uniba.sk/courses/java2/ (Login: java/vaja) • Sieťovéaplikácie client/server • Distribuovanévýpočty • Využitietechnológií XML v Jave • Práca s databázami z Javy • Servlety, JSP • Java reflection model VMAalias Vývoj mobilných aplikácií • Android Peter Borovanský, Windows Roman Fulop, iPhone sa hľadá... • http://dai.fmph.uniba.sk/courses/VMA/ Programovacie paradigmy • http://dai.fmph.uniba.sk/courses/PARA/

More Related