29. maj 2001 - 09:27
Der er
5 kommentarer og
1 løsning
fejlbesked fra explorer 5.0 ?
Hvad sker det her ?
Microsoft (R) VM for Java, 5.0 Release 5.0.0.3802
==============================================
? hjælp
c ryd
f kør afsluttere
g Hent affald
m hukommelsesbrug
q afslut
t thread list
==============================================
com.ms.security.SecurityExceptionEx[WormViewer.init]: java.io.IOException: bad path: C:\\datanom\\worm\\java\\awt\\image\\BufferedImage.class
at com/ms/security/permissions/FileIOPermission.check
at com/ms/security/PolicyEngine.deepCheck
at com/ms/security/PolicyEngine.checkPermission
at com/ms/security/StandardSecurityManager.chk
at com/ms/security/StandardSecurityManager.checkRead
at java/io/File.isDirectory
at sun/net/www/protocol/file/FileURLConnection.connect
at sun/net/www/protocol/file/FileURLConnection.getInputStream
at com/ms/vm/loader/ResourceLoader.getURLData
at com/ms/vm/loader/ResourceLoader.getCodebaseRelativeData
at com/ms/vm/loader/ResourceLoader.getClassData
at com/ms/vm/loader/URLClassLoader.findClass
at com/ms/vm/loader/URLClassLoader.loadClass
at java/lang/ClassLoader.loadClassInternal
at WormViewer.init
at com/ms/applet/AppletPanel.securedCall0
at com/ms/applet/AppletPanel.securedCall
at com/ms/applet/AppletPanel.processSentEvent
at com/ms/applet/AppletPanel.processSentEvent
at com/ms/applet/AppletPanel.run
at java/lang/Thread.run
java.lang.ClassNotFoundException: java.awt.image.BufferedImage
at com/ms/vm/loader/URLClassLoader.loadClass
at java/lang/ClassLoader.loadClassInternal
at WormViewer.init
at com/ms/applet/AppletPanel.securedCall0
at com/ms/applet/AppletPanel.securedCall
at com/ms/applet/AppletPanel.processSentEvent
at com/ms/applet/AppletPanel.processSentEvent
at com/ms/applet/AppletPanel.run
at java/lang/Thread.run
det første lyder som om din path til image er forkert format, men den kodestump kan du jo lige poste.
Den anden skyldes, at BufferedImage er noget der er kommet til java 1.2 og derfor typisk ikke understøttet i browsere uden java-plugin. Disse understøtter typisk kun java 1.1
/*
* WormViewer.java
*
* Created on 26. maj 2001, 22:56
*/
/**
*
* @author
* @version
*/
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.awt.image.BufferedImage;
public class WormViewer extends java.applet.Applet implements Runnable,KeyListener{
Thread thread;
Vector map,food,enemys;
Wall wall;
Point s = new Point(30,30);
boolean paint = false;
private static Graphics G;
private static BufferedImage b ;
private Worm w = new Worm(50,50);
//private Worm enemy = new Worm();
boolean west = false;
boolean east = false;
boolean north = false;
boolean south = false;
// End of variables declaration
/** Initializes the applet WormViewer */
public void init () {
initComponents ();
}
/** This method is called from within the init() method to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the FormEditor.
*/
private void initComponents() {
setLayout(new java.awt.BorderLayout());
addKeyListener(this);
b = new BufferedImage(400, 400, 1);
G = b.createGraphics();
map = new Vector();
food = new Vector();
enemys = new Vector();
makeMap();
repaint();
}
public void keyTyped(KeyEvent e) {
System.out.println(e.getKeyCode());
}
/**Handle the key pressed event from the text field. */
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == 37) {
if (!east) {
west = true;
east = false;
north = false;
south = false;
}
}
if (e.getKeyCode() == 38) {
if (!south) {
north = true;
east = false;
west = false;
south = false;
}
}
if (e.getKeyCode() == 39) { //west
if (!west) {
east = true;
west = false;
north = false;
south = false;
}
}
if (e.getKeyCode() == 40) {
if (!north) {
south = true;
east = false;
west = false;
north = false;
}
}
System.out.println(e.getKeyCode());
}
/** Handle the key released event from the text field. */
public void keyReleased(KeyEvent e) {
}
// Variables declaration - do not modify
// End of variables declaration
public void makeMap() {
map = MapBuilder.buildLevel1();
food = MapBuilder.buildLevel1FoodItems();
enemys = MapBuilder.buildLevel1EnemyItems();
paint = true;
}
public void update(Graphics g) {
//g.setColor(Color.white);
//g.fillRect(0,0,200,200);
G.setColor(Color.white);
G.fillRect(0,0,400,400);
G.setColor(Color.black);
int x[] = w.XValues();
int y[] = w.YValues();
int i;
for(i = 0;i < x.length;i++) {
G.fillRect(x[i],y[i],5,5);
}
//x = enemy.XValues();
//y = enemy.YValues();
for(i = 0;i < x.length;i++) {
G.fillRect(x[i],y[i],5,5);
}
G.setColor(Color.cyan);
if(paint) {
for(i = 0;i < map.size() ;i++) {
Wall w = (Wall)map.elementAt(i);
Point p = w.getPosition();
G.drawRect(p.x,p.y,5,5);
}
}
G.setColor(Color.black);
if(paint) {
for(i = 0;i < food.size() ;i++) {
Food f = (Food)food.elementAt(i);
Point p = f.getPosition();
G.drawString(i + \"\",p.x,p.y);
G.drawRect(p.x,p.y,5,5);
}
G.setColor(Color.red);
for(i = 0;i < enemys.size() ;i++) {
Worm w1 = (Worm)enemys.elementAt(i);
x = w1.XValues();
y = w1.YValues();
//G.drawString(i + \"\",p.x,p.y);
G.drawRect(x[0],y[0],5,5);
}
}
g.drawImage(b,0,0,this);
}
public void collisionCheck() {
int[] d = w.XValues();
int[] f = w.YValues();
int x = d[0];
int y = f[0];
Point p = new Point(x,y);
int i;
for(i = 0;i < map.size();i++) {
Wall w2 = (Wall)map.elementAt(i);
Point p1 = w2.getPosition();
if (x == p1.x && y == p1.y) {
thread.stop();
}
}
for(i = 1;i < d.length;i++) {
if (x == d[i] && y == f[i]) {
//thread.stop()
System.out.println(\"eat myself\");
thread.stop();
}
}
for(i = 0;i < food.size();i++) {
Food f1 = (Food)food.elementAt(i);
Point p1 = f1.getPosition();
if (x == p1.x && y == p1.y) {
System.out.println(\"food\");
w.grow();w.grow();w.grow();w.grow();
food.removeElementAt(i);
}
}
}
public void collisionCheckEnemy() {
int j = 0;
while (j < enemys.size()) {
Worm w1 = (Worm)enemys.elementAt(j);
int[] d = w1.XValues();
int[] f = w1.YValues();
int x = d[0];
int y = f[0];
Point p = new Point(x,y);
int i;
for(i = 0;i < map.size();i++) {
Wall w2 = (Wall)map.elementAt(i);
Point p1 = w2.getPosition();
if (x == p1.x && y == p1.y) {
System.out.print(\"enemy dead\");
enemys.removeElementAt(j);
}
}
for(i = 0;i < food.size();i++) {
Food f1 = (Food)food.elementAt(i);
Point p1 = f1.getPosition();
if (x == p1.x && y == p1.y) {
System.out.println(\"food\");
food.removeElementAt(i);
}
}
j++;
}//end while
}
private void exitForm(java.awt.event.WindowEvent evt) {
System.exit (0);
}
public void start() {
if (thread == null) {
thread = new Thread(this);
thread.start();
}
}
public void stop() {
if (thread != null) {
thread.stop();
thread = null;
}
}
public void run() {
while (true) {
if (west) {
w.moveWest();
collisionCheck();
}
if (east) {
w.moveEast();
collisionCheck();
}
if (north) {
w.moveNorth();
collisionCheck();
}
if (south) {
w.moveSouth();
collisionCheck();
}
moveEnemyWorm();
collisionCheckEnemy();
repaint();
try { Thread.sleep(100); }
catch (InterruptedException e) {}
} //end while
}
public static int randomInt(int a, int b) {
if (a > b) throw new IllegalArgumentException();
if (a == b) return a;
double x = Math.random();
int n = a + (int)(x * (b - a + 1));
if (n > b) n = b;
return n;
}//end ran
public void moveEnemyWorm() {
int i;
for(i = 0;i < enemys.size();i++) {
Worm w1 = (Worm)enemys.elementAt(i);
int r = randomInt(1,4);
switch (r) {
case 1:
w1.moveEast();
break;
case 2:
w1.moveWest();
break;
case 3:
w1.moveNorth();
break;
case 4:
w1.moveSouth();
break;
}//end switch
}//end for
}
}// end wormviewer
image er abstrakt i både 1.1 og 1.2 Et image har altid været noget man loadede i en platformsafhængig måde, f.eks. gennem appletcontext.getImage()
Runnable har heller ikke ændret sig mellem 1.1 og 1.2 I begge tilfælde er det et interface med én methode run()
Runnable og tråde har ikke ændret sig meget, men en ting.
Man bør ikke længere kalde stop() direkte på en tråd. Det var en potentiel dødssejler hvad angik låste applikationer..
I din applets stopmetode kalder du decideret stop på tråden, og din run() metode kører da også while(true).
Nu om dage vil man i run køre: while(running){...}
og i stop sige : running = false;
og i start sige: running = true;
Så kan trådens whileløkke terminere pænt.