可能重复:
non-static variable cannot be referenced from a static context (java)
我在编译以下java代码时遇到了上述错误。 我是这种语言的新手,我不太确定code.i可以清除正常的错误,但这个我不明白它是什么。请帮助我
public class Kari_Server
{
ServerSocket server_socket=new ServerSocket(666);
Socket soc=server_socket.accept();
DataInputStream data_in=new DataInputStream(soc.getInputStream());
DataOutputStreamdata_out=newDataOutputStream(soc.getOutputStream());
int a=1;
int i;
public void screen()throws Exception
{
Robot robo=new Robot();
BufferedImage screen_shot=robo.createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));
ImageIO.write(screen_shot,"JPG",new File("C:\\windows\\temp\\screen_shot"+a+".jpg"));
FileInputStream file_in=new FileInputStream("C:\\windows\\temp\\screen_shot"+a+".jpg");
byte[] mybyte=new byte[1024];
try
{
while((i=file_in.read(mybyte))>-1)
data_out.writeUTF(mybyte,0,i);
}
catch(Exception e) {}
}
public static void main(String args[])throws Exception
{
Kari_Server kari=new Kari_Server();
while(true)
{
String s1=" ";
s1=data_in.readUTF();
if(s1=="attack")
kari.screen();
else
System.exit(0);
}
}
}
答案 0 :(得分:1)
主要方法是静态方法。除了类中的静态变量之外,它无法访问任何内容。要访问data_in,您需要使用现有的kari
变量。
所以,而不是
s1=data_in.readUTF();
使用
s1=kari.data_in.readUTF()
;
答案 1 :(得分:1)
data_in属于Kari_Server的实例,但主要功能不属于。将对data_in的引用移动到非静态函数:
...
protected readUTF() throws Exception
{
return data_in.readUTF();
}
public static void main(String args[]) throws Exception
{
{
Kari_Server kari=new Kari_Server();
while(true)
{
String s1=" ";
s1=kari.readUTF();
...
答案 2 :(得分:0)
我认为您的问题在于data_in
DataInputStream data_in=new DataInputStream(soc.getInputStream());
您在static void main方法
中使用该字段 s1=data_in.readUTF();
静态方法不能访问非静态字段。
解决方案是:
将您的data_in更改为静态字段
static DataInputStream data_in=new DataInputStream(soc.getInputStream());
或者,使用kari对象访问data_in:
kari.data_in
答案 3 :(得分:0)
data_in是Kari_Server类的成员字段。所以你需要通过Kari_Server的实例来引用它。 您可以使用kari.data_in或为此字段创建一个getter并使用kari.gatDataIn()。
答案 4 :(得分:0)
您正在从main方法调用静态方法和变量,因此您的方法和方法中使用的类中的所有变量都应声明为static。