无法从静态上下文中引用非静态

import java.applet.*;
import java.awt.*;
import java.util.*;
import java.text.*;

public class MyClock extends Applet {
MyPanel mp;
public void init() {
mp = new MyPanel(getParameter("format"));
add(mp);
}
}

class MyPanel extends Panel {
MyClockThread mct;
Color b, f;
SimpleDateFormat formatter;
String previousDateText = "";
String dateText;

MyPanel(String df) {
super();
formatter = new SimpleDateFormat(df);
validate();
setBackground(new Color(0).black);
setForeground(new Color(0).yellow);
b = this.getBackground();
f = this.getForeground();
mct = new MyClockThread(this);
mct.start();
}

public Dimension getPreferredSize() {
return new Dimension
(this.getFontMetrics(this.getFont()).stringWidth(getNow()) + 25, 30);
}

public void paint(Graphics g) {
if (g != null) {
g.setColor(b);
g.drawString(previousDateText,10,15);
g.setColor(f);
dateText = getNow();
g.drawString(dateText,10,15);
previousDateText = dateText;
}
}

public String getNow() {
return formatter.format(new Date());
}
}

class MyClockThread extends Thread {
MyPanel mp;

public MyClockThread(MyPanel a) {
mp = a;
}
public void run() {
while (true) {
try {
mp.repaint();
this.sleep(1000);
}
catch(InterruptedException e) { }
}
}
public static void main(String[] args)
{
run();
}
}
自己在网上看到的一个小程序,刚抄下来时提示没有main函数,加了一个之后出错,错误代码是无法从静态上下文中引用非静态 方法run,求各位大神解答

我稍微做了下修改:

import java.applet.*;

import java.awt.*;

import java.util.*;

import java.text.*;

public class MyClock extends Applet {

 MyPanel mp;  

 public void init() {

     mp = new MyPanel();    

     add(mp);    

 } 

}

class MyPanel extends Panel {  

 MyClockThread mct;  

 Color b, f;  

 SimpleDateFormat formatter;  

 String previousDateText = "";  

 String dateText;  

 MyPanel() {    

  super();    

  formatter = new SimpleDateFormat("yyyy-MM-dd 'at' HH:mm:ss");    

  validate();    

  setBackground(new Color(0).black);    

  setForeground(new Color(0).yellow);    

  b = this.getBackground();    

  f = this.getForeground();    

  mct = new MyClockThread(this);    

  mct.start();    

 }  

 public Dimension getPreferredSize() {    

  return new Dimension(this.getFontMetrics(this.getFont()).stringWidth(getNow()) + 25, 30);    

 }  

 public void paint(Graphics g) {    

  if (g != null) {       

   g.setColor(b);       

   g.drawString(previousDateText,10,15);       

   g.setColor(f);       

   dateText = getNow();       

   g.drawString(dateText,10,15);       

   previousDateText = dateText;       

  }    

 }  

 public String getNow() {    

  return formatter.format(new Date());    

 }

}

class MyClockThread extends Thread {  

 MyPanel mp;  

 public MyClockThread(MyPanel a) {    

  mp = a;    

 } 

 public void run() {   

  while (true) {     

   try {       

    mp.repaint();       

    this.sleep(1000);       

   }     catch(InterruptedException e) { }     

  }   

 } 

}

另外还需自己新建一个HTML页面:

MyClock.html

<html>

<head>

 <title>MyClockApplet</title>

</head>

<body>

<p><applet code="MyClock.class"width="300"height="200"></applet>

</body>

</html>

一般先在命令行编译java类文件(建议将每个类单独建一个文件,便于在命令行编译),由于Applet是不需要main函数的,因此也就没有必要在java文件中使用该函数。编译之后,直接使用

appletviewer MyClock.html命令,敲回车即可,最终运行页面为:

希望对你学习编程有所帮助!

温馨提示:内容为网友见解,仅供参考
无其他回答

java无法从静态上下文引用非静态方法
具体来说,当我们在静态方法中尝试引用非静态成员变量时,编译器会抛出错误,原因是静态方法没有对象实例可供引用非静态成员方法。如果静态方法试图访问非静态成员变量,它实际上是在询问“哪个对象的变量?”,而没有明确的对象实例,因此编译器无法确定正确的引用,从而引发错误。简单总结,静态方法与非静态...

java中“无法从静态上下文中引用非静态变量”为什么?理由是什么?_百度...
静态变量是在类加载的时候创建的并赋值的,因此在一个动态方法里使用静态变量时可以的;静态上下文(静态代码块)也是在类加载时执行的,而非静态变量都是在类加载完成后再赋值的,如果能在静态块中使用非静态变量,就会因为该变量的空指针而抛异常(可能还不只这点问题,只是举个例)。JAVA类的加载机...

错误: 无法从静态上下文中引用非静态方法
由于main方法其实是一个静态方法,而maxProfit方法并没有实例化,所以会报错 错误: 无法从静态上下文中引用非静态 变量 this 修改方法:只需要实例化调用的静态变量所属对象即可。

无法从静态上下文中引用非静态 变量this为什么?怎么改?谢了 !_百度...
在静态成员函数里面是不允许访问实例的this变量的:f.addWindowListener(new (this));你应该把 my 设计成单例模式的类 public class my extends WindowsAdapter { static my instance;public static my getInstance() { if (instance == null) instance = new my();return instance;} private my()...

java中“无法从静态上下文中引用非静态变量”为什么?理由是什么?_百度...
静态上下文(静态代码块)也是在类加载时执行的,而非静态变量都是在类加载完成后再赋值的,如果能在静态块中使用非静态变量,就会因为该变量的空指针而抛异常(可能还不只这点问题,只是举个例)。JAVA类的加载机制就决定了无法从静态上下文中引用非静态变量。

错误: 无法从静态上下文中引用非静态 变量 this
this 是指向当前对象的引用,需要对象实例化以后才能赋值。而静态成员都是类所属的,不需要对实例化就可以使用,所以在静态上下文中引用this时可能其还未赋值,所以应不能这样使用。

无法从静态上下文中引用非静态变量
你好:你的方法都是静态的(static),变量是非静态的,静态方法只能调用静态变量,所以把你类开头定义的那些变量改成静态的就行了

...无法从静态上下文中引用非静态变量。等大虾解释,谢谢!
在java中无法在静态方法中调用非静态的变量,主要是因为静态时属于类的,而非静态是属于对象的,当你调用静态方法调用时,对象是否创建,变量是否初始化,是不是需要考虑?所以在java中,无法判断是否非静态的变量是否存在,即静态方法不能调用非静态变量,用现实的例子举证也是,比如你现在想调用你未来的...

...程序出现了问题:无法从静态上下文中引用非静态变量subName和fpi...
因此在一个静态的方法中是不能直接访问非 static 变量,我们必须知道你想访问的是哪个对象实例的状态,也就是说我们必须用 myInstance.fieldA 这种方法来访问,这也要求我们手上必须有一个对象实例。所以你的代码中:Sub sub=new Sub();System.out.println("Sub.subName= "+Sub.subName);这个 Sub...

“无法从静态上下文中引用非静态方法”这个问题怎么解决?
解决方法:可以去除一般方法的static关键字(如果是main方法,则不能去掉static)。另外一种方法就是把需要引用的方法也设置成静态方法。用static修饰的方法称为静态方法,修饰变量则为静态变量,又分别叫做类方法或者类变量。 静态方法中不能直接调用非静态方法。因为非静态方法不是独立存在的,它是依附于...

相似回答