我正在尝试为学校创建一个TicTacToe java程序,它不是在学校绘制而是在家里画画?我也有一个问题,在第一次运行时,第一个盒子出现了两次JOptionPanes。我得到null和安全性错误,并认为这与它有关
import java.applet.Applet;
import java.awt.*;
import java.net.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.Random;
import javax.swing.JOptionPane;
import cs1.Keyboard;
public class TicTac2 extends Applet
{
int white;
int blue;
int x;
String xstr, ystr;
int s = 0; // 1,1 o
int t = 0; //1,2 o
int f = 0; //1,3 o
int u = 0; //2,1 o
int h =0; //2,2 o
int j = 0; //2,3 o
int k = 0; //3,1 o
int l = 0; //3,2 o
int m = 0; //3,3 o
int y;
int a = 10;
int won = 0;
int who = 0; // 5= x, 10 =o
// Who goes first in the next game?
boolean first = true;
Image notImage; //white
Image crossImage; //blue
public void init() {
notImage = getImage(getCodeBase(), "images/not.gif");
crossImage = getImage(getCodeBase(), "images/cross.gif");
}
/**
* Paint it.
*/
public void paint(Graphics g)
{
Dimension d = getSize();
g.setColor(Color.black);
int xoff = d.width / 3;
int yoff = d.height / 3;
g.drawLine(xoff, 0, xoff, d.height);
g.drawLine(2*xoff, 0, 2*xoff, d.height);
g.drawLine(0, yoff, d.width, yoff);
g.drawLine(0, 2*yoff, d.width, 2*yoff);
int i = 0;
for (int r = 0 ; r < 3 ; r++)
{
for (int c = 0 ; c < 3 ; c++, i++)
{
if ((white & (1 << i)) != 0)
{
g.drawImage(notImage, c*xoff + 1, r*yoff + 1, this);
}
else if ((blue & (1 << i)) != 0)
{
g.drawImage(crossImage, c*xoff + 1, r*yoff + 1, this);
}
}
}
/*g.setColor(Color.black);
g.drawLine(130,0, 130, 700);
g.drawLine(270,0,270,700);
g.drawLine(0,125,900,125);
g.drawLine(0,250,900,250);
String result;*/
int z=0;
while (won == 0)
{
//for(i=0; i< 10; i++)
//{
x=0;
y=0;
while (x >3 || x<1)
{
xstr = JOptionPane.showInputDialog("Enter an int for x(1-3): ");
x = Integer.parseInt(xstr);
}
z=1;
System.out.print(x);
while (y>3 || y<1)
{
ystr = JOptionPane.showInputDialog("Enter an int for y(1-3): ");
y = Integer.parseInt(ystr);
}
System.out.println(y);
int p = 0 ;
if (x==2)
{
p = 140;
}
if (x==3)
{
p = 275;
}
System.out.println("test");
if (x==1 || x==2 || x ==3)
{
g.setColor(Color.blue);
if (y==1)
{
g.drawLine(20+p,20,100+p,100);
g.drawLine(100+p,20,20+p,100);
if (p == 0)
{
s = 1;
}
if (p ==140)
{
t = 1;
}
if (p==275)
{
f=1;
}
}
if (y==2)
{
g.drawLine(20+p,150,100+p,220);
g.drawLine(100+p,150,20+p,220);
if (p == 0)
{
u = 1;
}
if (p ==140)
{
h = 1;
}
if (p==275)
{
j=1;
}
}
if (y==3)
{
g.drawLine(20+p,280,100+p,340);
g.drawLine(100+p,280,20+p,340);
if (p == 0)
{
k = 1;
}
if (p ==140)
{
l = 1;
}
if (p==275)
{
m=1;
}
}
if (s==1 && h==1 && m==1 || s==1 && t==1 && f==1 || s==1 && u==1 && k==1 || k==1 && h==1 && f==1 || u==1 && h==1 && j==1 || k==1 && l==1 && m==1 || t==1 && h==1 && l==1 || f==1 && j==1 && m==1)
{
who = 5; //x
won =1;
}
if (won == 1 && who == 5) // if x won
{
JOptionPane.getRootFrame().dispose();
String xwon = "You won!!!!! NICE JOB!!";
JOptionPane.showMessageDialog (null, xwon);
//outputToApplet.flush();
//outputToApplet.close();
//destroy();
System.exit(0);
}
if (h==0) //(2,2) center!
{
g.drawOval (155,155,80,70);
h=2;
}
else if (s==0) //(1,1)
{
g.drawOval (23,20,70,70);
s=2;
}
else if(m==0) //(3,3)
{
g.drawOval (290,280,80,70);
m=2;
}
else if(k==0) //(1,3)
{
g.drawOval (23,280,80,70);
k=2;
}
else if(f==0) //(3,1)
{
g.drawOval (280,20,115,70);
f=2;
}
else if(t==0)//(2,1)
{
g.drawOval (150,20,100,70);
t=2;
}
else if(u==0) //(1,2)
{
g.drawOval (25,155,80,70);
u=2;
}
else if(l==0) //(2,3) bottom middle
{
g.drawOval (155,280,80,70);
l=2;
}
else if (j==0) //(3,2)
{
g.drawOval (290,155,80,70);
j=0;
}
if (s==2 && h==2 && m==2 || s==2 && t==2 && f==2 || k==2 && h==2 && f==2 ||s==2 && u==2 && k==2 || u==2 && h==2 && j==2 || k==2 && l==2 && m==2 || t==2 && h==2 && l==2 || f==2 && j==2 && m==2)
{
who = 10; //o
won =1;
}
//}
else if (s>0 && t>0 && f>0 && h>0 && u>0 && j>0 && k>0 && l>0 && m>0)
{
JOptionPane.getRootFrame().dispose();
String tie = "It is a draw!!";
JOptionPane.showMessageDialog (null, tie);
System.exit(0);
}
/*if (won == 1 && who == 5) // if x won
{
String xwon = "You won!!!!! NICE JOB!!";
JOptionPane.showMessageDialog (null, xwon);
System.exit(0);
}*/
if (won == 1 && who == 10) // if o won
{
JOptionPane.getRootFrame().dispose();
String owon = "You LOST!!! HAHAHAHHAHAH";
JOptionPane.showMessageDialog (null, owon);
System.exit(0);
}
}
}
}
}
这是错误代码
Exception occurred during event dispatching:
java.security.AccessControlException: access denied (java.lang.RuntimePermission exitVM.0)
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:323)
at java.security.AccessController.checkPermission(AccessController.java:546)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
at java.lang.SecurityManager.checkExit(SecurityManager.java:744)
at java.lang.Runtime.exit(Runtime.java:88)
at java.lang.System.exit(System.java:904)
at TicTac2.paint(TicTac2.java:264)
at sun.awt.RepaintArea.paintComponent(RepaintArea.java:248)
at sun.awt.RepaintArea.paint(RepaintArea.java:224)
at sun.awt.windows.WComponentPeer.handleEvent(WComponentPeer.java:310)
at java.awt.Component.dispatchEventImpl(Component.java:4706)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:178)
at java.awt.Dialog$1.run(Dialog.java:1046)
at java.awt.Dialog$3.run(Dialog.java:1098)
at java.security.AccessController.doPrivileged(Native Method)
at java.awt.Dialog.show(Dialog.java:1096)
at javax.swing.JOptionPane.showInputDialog(JOptionPane.java:566)
at javax.swing.JOptionPane.showInputDialog(JOptionPane.java:508)
at javax.swing.JOptionPane.showInputDialog(JOptionPane.java:458)
at javax.swing.JOptionPane.showInputDialog(JOptionPane.java:424)
at TicTac2.paint(TicTac2.java:101)
at sun.awt.RepaintArea.paintComponent(RepaintArea.java:248)
at sun.awt.RepaintArea.paint(RepaintArea.java:224)
at sun.awt.windows.WComponentPeer.handleEvent(WComponentPeer.java:310)
at java.awt.Component.dispatchEventImpl(Component.java:4706)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Exception in thread "AWT-EventQueue-1" java.lang.NumberFormatException: null
at java.lang.Integer.parseInt(Integer.java:417)
at java.lang.Integer.parseInt(Integer.java:499)
at TicTac2.paint(TicTac2.java:102)
at sun.awt.RepaintArea.paintComponent(RepaintArea.java:248)
at sun.awt.RepaintArea.paint(RepaintArea.java:224)
at sun.awt.windows.WComponentPeer.handleEvent(WComponentPeer.java:310)
at java.awt.Component.dispatchEventImpl(Component.java:4706)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
答案 0 :(得分:0)
替换第264行。
System.exit(0);
.. ..用
getAppletContext().showDocument(new URL("ThanksForUsingOurApplet.html"));
小程序是网页中的来宾&amp;可能共享一个VM。致电System.exit(n)
就像烧毁宾馆的客人一样。