// import javax.swing.JApplet; import javax.swing.JLabel; import javax.swing.JTextArea; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.SwingUtilities; import java.awt.Container; import java.awt.FlowLayout; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import java.io.InputStreamReader; import java.io.BufferedReader; import java.io.IOException; import java.net.InetAddress; import java.net.Socket; import java.util.HashMap; import java.util.StringTokenizer; import java.util.Iterator; public final class TempApplet extends JApplet implements ActionListener { private static final int PORT = 3003; private JLabel etikett = new JLabel("De senaste temperaturerna:"); private JTextArea tempfönster = new JTextArea(8, 20); private JButton knapp = new JButton("Rensa"); public void init() { try { Container cp = getContentPane(); cp.setLayout(new FlowLayout()); cp.add(etikett); cp.add(tempfönster); cp.add(knapp); knapp.addActionListener(this); InetAddress addr = InetAddress.getByName("localhost"); Socket socket = new Socket(addr, PORT); BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); ServerListener t = new ServerListener(in, tempfönster); t.start(); } catch (IOException e) { tempfönster.append("Det har upppstått ett fel."); } } public void actionPerformed(ActionEvent e) { tempfönster.setText(""); } public static void main(String[] args) { TempApplet applet = new TempApplet(); JFrame frame = new JFrame("TempApplet"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().add(applet); frame.setSize(250, 200); applet.init(); applet.start(); frame.setVisible(true); } } // class TempApplet final class ServerListener extends Thread { private final BufferedReader fromServer; private final JTextArea utfönster; private final HashMap tabellen; public ServerListener(BufferedReader fromServer, JTextArea utfönster) { this.fromServer = fromServer; this.utfönster = utfönster; this.tabellen = new HashMap(); } private class SetText implements Runnable { private String text; public SetText(String text) { this.text = text; } public void run() { utfönster.setText(text); } } private class AppendText implements Runnable { private String text; public AppendText(String text) { this.text = text; } public void run() { utfönster.append(text); } } public void run() { String lineFromServer; try { while ((lineFromServer = fromServer.readLine()) != null) { // Warning: This fails for location names that contain spaces. StringTokenizer tokenizer = new StringTokenizer(lineFromServer, " "); String ort = tokenizer.nextToken(); String temperatur = tokenizer.nextToken(); tabellen.put(ort, temperatur); SwingUtilities.invokeLater(new SetText("")); for (Iterator i = tabellen.keySet().iterator(); i.hasNext(); ) { String o = (String)i.next(); SwingUtilities.invokeLater(new AppendText(o + " " + tabellen.get(o) + "\n")); } } SwingUtilities.invokeLater(new AppendText("Servern har kopplat ner.\n")); } catch (IOException e) { SwingUtilities.invokeLater(new AppendText("Det har upppstått ett fel.")); } } } // class ServerListener