|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: May 2004
Città: provincia Milano
Messaggi: 105
|
applet in programma java: come si fa?
Buongiorno a tutti,
sarei grato a chinque mi sappia trovare una soluzione: vorrei inserire un applet scitto in java in una programma java (non quindi in una pagina html); è possibile? ![]() Ci ho provato, creando un'istanza della classe non mi dà problemi, ma appena gli dico di inizializzarmi tale istanza mi dà problemi di NullPointerException. ![]() |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
|
Un'applet è visualizzabile solo tramite web, quindi ti serve un browser, quindi no, non puoi farlo. SORRY
__________________
My gaming placement |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
|
un applet è un pannello come tutti gli altri, quindi puoi trattarlo come faresti con un altra istanza di Panel:
mettiamo che l'applet si chiami foopackage.FooApplet: Codice:
import foopackage.FooApplet; import javax.swing.*; import java.awt.*; public class MyFrame extends JFrame { public MyFrame() { FooApplet applet = new FooApplet(); applet.init(); applet.start(); setLayout(new BorderLayout()); getContentPane().add(BorderLayout.CENTER, applet); pack(); } public static void main(String args[]) { MyFrame f = new MyFrame(); f.show(); } } probabilmente dovrai sistemare le dimensioni, perchè quelle quando gira in una pagina web vengono gestite dal browser. |
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
|
Quote:
![]() ![]() ![]() ![]() Uffi, comunque come è bello impoarare, GRAZIE KINGV ![]() ![]()
__________________
My gaming placement |
|
![]() |
![]() |
![]() |
#5 |
Member
Iscritto dal: May 2004
Città: provincia Milano
Messaggi: 105
|
uff non mi funziona
bè innanzitutto grazie per la risposta!
![]() penso che il metodo da te usato sia migliore di come avevo provato inutilmente a fare io, ![]() però purtroppo mi dà ancora errore di puntatore nullo (NullPointerException)... ![]() esattamente in 4 punti: - at java.applet.Applet.getParameter(Applet.java:168) -> return stub.getParameter(name); - at javaapplication38.RDFGraph.init(RDFGraph.java:324) ->String edges = getParameter("triples"); - at javaapplication38.Main.<init>(Main.java:21) -> applet.init(); - at javaapplication38.Main.main(Main.java:31) ->Main f = new Main(); per caso sai come mai? grazie comunque........ |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
|
posta il codice che vediamo.
__________________
My gaming placement |
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
|
Quote:
il problema è qui, come sai esiste la possibilità di passare dei parametri dalla pagina html all'applet e di recuperarli dall'applet con getParameter(String). Il problema è che non esiste un setParameter, per cui lui si aspetta un parametro passato dall'html che tu non hai maniera di valorizzare. |
|
![]() |
![]() |
![]() |
#8 |
Member
Iscritto dal: May 2004
Città: provincia Milano
Messaggi: 105
|
grazie ancora per la risposta!
cmq ok... quindi questo applet non posso utilizzarlo direttamente in un programma java, ma dovrei metterlo in una pagina html... se no non c'è qualche modo per passargli sti parametri? (scusatemi ma come avrete capito non sono molto esperto in java) comunque l'applet che sto cercando di usare è della sun, lo metto in allegato.... |
![]() |
![]() |
![]() |
#9 | |
Senior Member
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
|
Quote:
non ho Word, metteresti un file di testo? generalmente gli applet di esempio hanno già un main per essere lanciati come applicazioni. |
|
![]() |
![]() |
![]() |
#10 |
Member
Iscritto dal: May 2004
Città: provincia Milano
Messaggi: 105
|
guarda purtroppo non ho altri file riguardanti questo applet perchè me lo hanno passato, ma avevo trovato sul sito della sun una pagina in cui c'era proprio tale applet che girava...intanto ti incollo il codice, mentre cerco tale pagina...
import java.util.*; import java.awt.*; import java.applet.Applet; import java.awt.event.*; class Node { double x; double y; double dx; double dy; boolean fixed; String lbl; } class Edge { int from; int to; double len; } class GraphPanel extends Panel implements Runnable, MouseListener, MouseMotionListener { Graph graph; int nnodes; Node nodes[] = new Node[100]; int nedges; Edge edges[] = new Edge[200]; Thread relaxer; boolean stress; boolean random; GraphPanel(Graph graph) { this.graph = graph; addMouseListener(this); } int findNode(String lbl) { for (int i = 0 ; i < nnodes ; i++) { if (nodes[i].lbl.equals(lbl)) { return i; } } return addNode(lbl); } int addNode(String lbl) { Node n = new Node(); n.x = 10 + 380*Math.random(); n.y = 10 + 380*Math.random(); n.lbl = lbl; nodes[nnodes] = n; return nnodes++; } void addEdge(String from, String to, int len) { Edge e = new Edge(); e.from = findNode(from); e.to = findNode(to); e.len = len; edges[nedges++] = e; } public void run() { Thread me = Thread.currentThread(); while (relaxer == me) { relax(); if (random && (Math.random() < 0.03)) { Node n = nodes[(int)(Math.random() * nnodes)]; if (!n.fixed) { n.x += 100*Math.random() - 50; n.y += 100*Math.random() - 50; } graph.play(graph.getCodeBase(), "audio/drip.au"); } try { Thread.sleep(100); } catch (InterruptedException e) { break; } } } synchronized void relax() { for (int i = 0 ; i < nedges ; i++) { Edge e = edges[i]; double vx = nodes[e.to].x - nodes[e.from].x; double vy = nodes[e.to].y - nodes[e.from].y; double len = Math.sqrt(vx * vx + vy * vy); len = (len == 0) ? .0001 : len; double f = (edges[i].len - len) / (len * 3); double dx = f * vx; double dy = f * vy; nodes[e.to].dx += dx; nodes[e.to].dy += dy; nodes[e.from].dx += -dx; nodes[e.from].dy += -dy; } for (int i = 0 ; i < nnodes ; i++) { Node n1 = nodes[i]; double dx = 0; double dy = 0; for (int j = 0 ; j < nnodes ; j++) { if (i == j) { continue; } Node n2 = nodes[j]; double vx = n1.x - n2.x; double vy = n1.y - n2.y; double len = vx * vx + vy * vy; if (len == 0) { dx += Math.random(); dy += Math.random(); } else if (len < 100*100) { dx += vx / len; dy += vy / len; } } double dlen = dx * dx + dy * dy; if (dlen > 0) { dlen = Math.sqrt(dlen) / 2; n1.dx += dx / dlen; n1.dy += dy / dlen; } } Dimension d = getSize(); for (int i = 0 ; i < nnodes ; i++) { Node n = nodes[i]; if (!n.fixed) { n.x += Math.max(-5, Math.min(5, n.dx)); n.y += Math.max(-5, Math.min(5, n.dy)); } if (n.x < 0) { n.x = 0; } else if (n.x > d.width) { n.x = d.width; } if (n.y < 0) { n.y = 0; } else if (n.y > d.height) { n.y = d.height; } n.dx /= 2; n.dy /= 2; } repaint(); } Node pick; boolean pickfixed; Image offscreen; Dimension offscreensize; Graphics offgraphics; final Color fixedColor = Color.red; final Color selectColor = Color.pink; final Color edgeColor = Color.black; final Color nodeColor = new Color(250, 220, 100); final Color stressColor = Color.darkGray; final Color arcColor1 = Color.black; final Color arcColor2 = Color.pink; final Color arcColor3 = Color.red; public void paintNode(Graphics g, Node n, FontMetrics fm) { int x = (int)n.x; int y = (int)n.y; g.setColor((n == pick) ? selectColor : (n.fixed ? fixedColor : nodeColor)); int w = fm.stringWidth(n.lbl) + 10; int h = fm.getHeight() + 4; g.fillRect(x - w/2, y - h / 2, w, h); g.setColor(Color.black); g.drawRect(x - w/2, y - h / 2, w-1, h-1); g.drawString(n.lbl, x - (w-10)/2, (y - (h-4)/2) + fm.getAscent()); } public synchronized void update(Graphics g) { Dimension d = getSize(); if ((offscreen == null) || (d.width != offscreensize.width) || (d.height != offscreensize.height)) { offscreen = createImage(d.width, d.height); offscreensize = d; if (offgraphics != null) { offgraphics.dispose(); } offgraphics = offscreen.getGraphics(); offgraphics.setFont(getFont()); } offgraphics.setColor(getBackground()); offgraphics.fillRect(0, 0, d.width, d.height); for (int i = 0 ; i < nedges ; i++) { Edge e = edges[i]; int x1 = (int)nodes[e.from].x; int y1 = (int)nodes[e.from].y; int x2 = (int)nodes[e.to].x; int y2 = (int)nodes[e.to].y; int len = (int)Math.abs(Math.sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2)) - e.len); offgraphics.setColor((len < 10) ? arcColor1 : (len < 20 ? arcColor2 : arcColor3)) ; offgraphics.drawLine(x1, y1, x2, y2); if (stress) { String lbl = String.valueOf(len); offgraphics.setColor(stressColor); offgraphics.drawString(lbl, x1 + (x2-x1)/2, y1 + (y2-y1)/2); offgraphics.setColor(edgeColor); } } FontMetrics fm = offgraphics.getFontMetrics(); for (int i = 0 ; i < nnodes ; i++) { paintNode(offgraphics, nodes[i], fm); } g.drawImage(offscreen, 0, 0, null); } //1.1 event handling public void mouseClicked(MouseEvent e) { } public void mousePressed(MouseEvent e) { addMouseMotionListener(this); double bestdist = Double.MAX_VALUE; int x = e.getX(); int y = e.getY(); for (int i = 0 ; i < nnodes ; i++) { Node n = nodes[i]; double dist = (n.x - x) * (n.x - x) + (n.y - y) * (n.y - y); if (dist < bestdist) { pick = n; bestdist = dist; } } pickfixed = pick.fixed; pick.fixed = true; pick.x = x; pick.y = y; repaint(); e.consume(); } public void mouseReleased(MouseEvent e) { removeMouseMotionListener(this); if (pick != null) { pick.x = e.getX(); pick.y = e.getY(); pick.fixed = pickfixed; pick = null; } repaint(); e.consume(); } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mouseDragged(MouseEvent e) { pick.x = e.getX(); pick.y = e.getY(); repaint(); e.consume(); } public void mouseMoved(MouseEvent e) { } public void start() { relaxer = new Thread(this); relaxer.start(); } public void stop() { relaxer = null; } } public class Graph extends Applet implements ActionListener, ItemListener { GraphPanel panel; Panel controlPanel; Button scramble = new Button("Scramble"); Button shake = new Button("Shake"); Checkbox stress = new Checkbox("Stress"); Checkbox random = new Checkbox("Random"); public void init() { setLayout(new BorderLayout()); panel = new GraphPanel(this); add("Center", panel); controlPanel = new Panel(); add("South", controlPanel); controlPanel.add(scramble); scramble.addActionListener(this); controlPanel.add(shake); shake.addActionListener(this); controlPanel.add(stress); stress.addItemListener(this); controlPanel.add(random); random.addItemListener(this); String edges = getParameter("edges"); for (StringTokenizer t = new StringTokenizer(edges, ",") ; t.hasMoreTokens() ; ) { String str = t.nextToken(); int i = str.indexOf('-'); if (i > 0) { int len = 50; int j = str.indexOf('/'); if (j > 0) { len = Integer.valueOf(str.substring(j+1)).intValue(); str = str.substring(0, j); } panel.addEdge(str.substring(0,i), str.substring(i+1), len); } } Dimension d = getSize(); String center = getParameter("center"); if (center != null){ Node n = panel.nodes[panel.findNode(center)]; n.x = d.width / 2; n.y = d.height / 2; n.fixed = true; } } public void destroy() { remove(panel); remove(controlPanel); } public void start() { panel.start(); } public void stop() { panel.stop(); } public void actionPerformed(ActionEvent e) { Object src = e.getSource(); if (src == scramble) { play(getCodeBase(), "audio/computer.au"); Dimension d = getSize(); for (int i = 0 ; i < panel.nnodes ; i++) { Node n = panel.nodes[i]; if (!n.fixed) { n.x = 10 + (d.width-20)*Math.random(); n.y = 10 + (d.height-20)*Math.random(); } } return; } if (src == shake) { play(getCodeBase(), "audio/gong.au"); Dimension d = getSize(); for (int i = 0 ; i < panel.nnodes ; i++) { Node n = panel.nodes[i]; if (!n.fixed) { n.x += 80*Math.random() - 40; n.y += 80*Math.random() - 40; } } } } public void itemStateChanged(ItemEvent e) { Object src = e.getSource(); boolean on = e.getStateChange() == ItemEvent.SELECTED; if (src == stress) panel.stress = on; else if (src == random) panel.random = on; } public String getAppletInfo() { return "Title: GraphLayout \nAuthor: <unknown>"; } public String[][] getParameterInfo() { String[][] info = { {"edges", "delimited string", "A comma-delimited list of all the edges. It takes the form of 'C-N1,C-N2,C-N3,C-NX,N1-N2/M12,N2-N3/M23,N3-NX/M3X,...' where C is the name of center node (see 'center' parameter) and NX is a node attached to the center node. For the edges connecting nodes to eachother (and not to the center node) you may (optionally) specify a length MXY separated from the edge name by a forward slash."}, {"center", "string", "The name of the center node."} }; return info; } } |
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
|
Ho modificato aggiungendo un metodo main che ti permette di eseguirlo come applicazione.
Ho sostituito anche i parametri che andavano in errore cablando a codice i valori che usava negli esempi (righe 381 e 397). dovrebbe funzionare. |
![]() |
![]() |
![]() |
#12 |
Member
Iscritto dal: May 2004
Città: provincia Milano
Messaggi: 105
|
grazie mille!
gentilissimo! lo provo subito (cmq il sito su cui l'ho trovato in funzione è http://www.gg.caltech.edu/~dhl/java/test/graph/graph.html)! grazie!! ![]() |
![]() |
![]() |
![]() |
#13 |
Member
Iscritto dal: May 2004
Città: provincia Milano
Messaggi: 105
|
Grande funziona benissimo!
grazie! ![]() |
![]() |
![]() |
![]() |
#14 | |
Senior Member
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
|
Quote:
![]() |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 11:22.