2011-10-21 36 views
1

CODE在這個小程序中聲明該類是否需要公開是什麼?

import java.awt.*; 
import javax.swing.*; 
import java.awt.event.*; 

/* <applet code="tester" height=400 width=400> 
* </applet> 
*/ 

class tester extends JApplet { 

boolean isFirst = true; 

public void init() { 

} 

public void start() { 
addMouseMotionListener(new MouseMotionAdapter() { 
    @Override 
     public void mouseMoved(MouseEvent evt) { 
     half_tester(evt); 
     } 
}); 
} 

public void paint(Graphics g) { 
    if(isFirst) { 
//JOptionPane.showMessageDialog(new JFrame(),"first time"); 
System.out.println("first time"); 
isFirst = false; 
    } else { 
//JOptionPane.showMessageDialog(new JFrame(),"not the first time"); 
    System.out.println("not the first time!"); 
    } 
} 

public void half_tester(MouseEvent evt) { 
    repaint(); 
} 
} 

例外

load: tester is not public or has no public constructor. 
java.lang.IllegalAccessException: Class sun.applet.AppletPanel can not access a member of class tester with modifiers "" 
    at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:95) 
    at java.lang.Class.newInstance0(Class.java:366) 
    at java.lang.Class.newInstance(Class.java:325) 
    at sun.applet.AppletPanel.createApplet(AppletPanel.java:795) 
    at sun.applet.AppletPanel.runLoader(AppletPanel.java:724) 
    at sun.applet.AppletPanel.run(AppletPanel.java:378) 
    at java.lang.Thread.run(Thread.java:729) 

爲什麼我需要聲明類上市?

回答

2

爲什麼我需要聲明該類是公開的?

因爲否則來自其他軟件包(如sun.applet.AppletPanel)的類無法訪問它。

如果您沒有將public添加到您的類定義中,它只能看到它的包,它是您的案例中的默認包。

+0

你能解釋一下嗎?我不明白。 – saplingPro

+0

我又添了一句話。 –

+0

+1。 *每個applet都需要公開聲明,而不僅僅是OP。 –

相關問題