powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / non-static variable cannot be referecned from a static context
15 сообщений из 15, страница 1 из 1
non-static variable cannot be referecned from a static context
    #34642979
DDT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет.

Пишу класс для работы с Excel-файлом. (пример см. ниже)

Почему в строках:
Код: plaintext
1.
2.
3.
4.
5.
        out_wb = Workbook.createWorkbook( new  File("new_workbook.xls"), in_wb);
        s = out_wb.getSheet( 0 );
        
         this .setvar("CELL1", "qweqweqweqweqweqwe");        
         this .close();

выдается ошибка:
non-static variable {var} cannot be referecned from a static context.

Строки находятся в методе:
Код: plaintext
1.
 public   static   void  main(String[] args)

Если убираю static, то компилятор ругается, что нет главного класса.

Как тут быть?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
/*
 * Main.java
 *
 * Created on 5 Июль 2007 г., 13:27
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

 package  excel2;


 import  java.io.*;
 import  java.io.File;
 import  java.io.FileNotFoundException;
 import  java.io.IOException;
 import  java.io.OutputStream;
 import  jxl.Cell;

 import  jxl.Workbook;
 import  jxl.read.biff.BiffException;
 import  jxl.write.Label;
 import  jxl.write.WritableCell;
 import  jxl.write.WritableCellFeatures;
 import  jxl.write.WritableCellFormat;
 import  jxl.write.WritableSheet;
 import  jxl.write.WritableWorkbook;
 import  jxl.write.WriteException;

/**
 *
 * @author victor
 */
 public   class  Main
{
    Workbook in_wb;
    WritableWorkbook out_wb;
    WritableSheet s;
    
    /** Creates a new instance of Main */
     public  Main()
    {
    }
    
    /**
     * @param args the command line arguments
     */
     public   static   void  main(String[] args)  throws  FileNotFoundException, IOException, WriteException, BiffException
    {
        Workbook in_wb = Workbook.getWorkbook( new  File("workbook.xls"));
        out_wb = Workbook.createWorkbook( new  File("new_workbook.xls"), in_wb);
        s = out_wb.getSheet( 0 );
        
         this .setvar("CELL1", "qweqweqweqweqweqwe");        
         this .close();
    }
    
     public  WritableWorkbook close()  throws  IOException, WriteException
    {
        out_wb.write();
        out_wb.close();
        in_wb.close();
        
         return  out_wb;
    }
    
     public  WritableSheet setvar(String varName, String varValue)  throws  WriteException
    {
        Cell c = s.findLabelCell("{" + varName + "}");

        WritableCellFormat cf =  new  WritableCellFormat(c.getCellFormat());
        Label labelC =  new  Label(c.getColumn(), c.getRow(), varValue);
        labelC.setCellFormat(cf);
        s.addCell(labelC);
        
         return  s;
    }
}
...
Рейтинг: 0 / 0
non-static variable cannot be referecned from a static context
    #34643019
y3u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сделай
Код: plaintext
1.
2.
3.
     private   static  Workbook in_wb;
     private   static  WritableWorkbook out_wb;
     private   static  WritableSheet s;
и читай основы
...
Рейтинг: 0 / 0
non-static variable cannot be referecned from a static context
    #34643026
y3u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати, вот тут
Код: plaintext
in_wb.close();
у тебя будет NullPointerException, потому что ты вместо того, чтобы присвоить значение глобальной переменной in_wb в main делаешь локальную переменную с точно таким же именем
Код: plaintext
Workbook in_wb = Workbook.getWorkbook( new  File("workbook.xls"));
...
Рейтинг: 0 / 0
non-static variable cannot be referecned from a static context
    #34643054
DDT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделал вот так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
 public   static   void  main(String[] args)  throws  FileNotFoundException, IOException, WriteException, BiffException
    {
         private   static  Workbook in_wb = Workbook.getWorkbook( new  File("workbook.xls"));
         private   static  out_wb = Workbook.createWorkbook( new  File("new_workbook.xls"), in_wb);
         private   static  s = out_wb.getSheet( 0 );
        
         this .setvar("CELL1", "qweqweqweqweqweqwe");        
         this .close();
    }

ругается:
illegal start of expression

По-моему я так пробовал делать...
...
Рейтинг: 0 / 0
non-static variable cannot be referecned from a static context
    #34643094
DDiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
думаю что всё-таки лучше написать как советовал y3u
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
...
 public   class  Main
{
     private   static  Workbook in_wb;
     private   static  WritableWorkbook out_wb;
     private   static  WritableSheet s;
...
 public   static   void  main(String[] args)  throws  FileNotFoundException, IOException, WriteException, BiffException
    {
        in_wb = Workbook.getWorkbook( new  File("workbook.xls"));
        out_wb = Workbook.createWorkbook( new  File("new_workbook.xls"), in_wb);
        s = out_wb.getSheet( 0 );
        
         this .setvar("CELL1", "qweqweqweqweqweqwe");        
         this .close();
    }
...
}
а то в методе объявлять private static переменные жёстко ;)
-----
Если дела идут плохо, есть вероятность, что в ближайшее время они пойдут ещё хуже. :)
...
Рейтинг: 0 / 0
non-static variable cannot be referecned from a static context
    #34643095
vas0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DDTСделал вот так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
 public   static   void  main(String[] args)  throws  FileNotFoundException, IOException, WriteException, BiffException
    {
         private   static  Workbook in_wb = Workbook.getWorkbook( new  File("workbook.xls"));
         private   static  out_wb = Workbook.createWorkbook( new  File("new_workbook.xls"), in_wb);
         private   static  s = out_wb.getSheet( 0 );
        
         this .setvar("CELL1", "qweqweqweqweqweqwe");        
         this .close();
    }
ты по ходу издеваешься?
...
Рейтинг: 0 / 0
non-static variable cannot be referecned from a static context
    #34643108
Juga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vas0 DDTСделал вот так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
 public   static   void  main(String[] args)  throws  FileNotFoundException, IOException, WriteException, BiffException
    {
         private   static  Workbook in_wb = Workbook.getWorkbook( new  File("workbook.xls"));
         private   static  out_wb = Workbook.createWorkbook( new  File("new_workbook.xls"), in_wb);
         private   static  s = out_wb.getSheet( 0 );
        
         this .setvar("CELL1", "qweqweqweqweqweqwe");        
         this .close();
    }
ты по ходу издеваешься?
пацталом. Кури основы.
...
Рейтинг: 0 / 0
non-static variable cannot be referecned from a static context
    #34643113
DDT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
М-м-м да, прошу прощения, ступил :)

+ еще убрал this из main()

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
     public   static   void  main(String[] args)  throws  FileNotFoundException, IOException, WriteException, BiffException
    {
        in_wb = Workbook.getWorkbook( new  File("workbook.xls"));
        out_wb = Workbook.createWorkbook( new  File("new_workbook.xls"), in_wb);
        s = out_wb.getSheet( 0 );
        
        setvar("CELL1", "qweqweqweqweqweqwe");        
        close();
    }


Спасибо за отвты.
...
Рейтинг: 0 / 0
non-static variable cannot be referecned from a static context
    #34643116
DDT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jugaпацталом. Кури основы.

Вот и пытаюсь раскурить ...
...
Рейтинг: 0 / 0
non-static variable cannot be referecned from a static context
    #34643583
DDT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С предыдущим вопросом разобрался, спасибо за помощь.

Уперся сейчас в следующее:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
 package  excel2;


 import  java.io.*;
 import  java.io.File;
 import  java.io.FileNotFoundException;
 import  java.io.IOException;
 import  java.io.OutputStream;
 import  jxl.Cell;

 import  jxl.Workbook;
 import  jxl.format.CellFormat;
 import  jxl.read.biff.BiffException;
 import  jxl.write.Label;
 import  jxl.write.WritableCell;
 import  jxl.write.WritableCellFeatures;
 import  jxl.write.WritableCellFormat;
 import  jxl.write.WritableSheet;
 import  jxl.write.WritableWorkbook;
 import  jxl.write.WriteException;

 public   class  Main
{
     private   static  Workbook in_wb;
     private   static  WritableWorkbook out_wb;
     private   static  WritableSheet s;
     private   static  Cell c;
     private   static  WritableCellFormat cf;
     private   static  Cell prevCell;
     private   static  Label labelC;
    
     public  Main()
    {
    }
    
     public   static   void  main(String[] args)  throws  FileNotFoundException, IOException, WriteException, BiffException
    {
        in_wb = Workbook.getWorkbook( new  File("workbook.xls"));
        out_wb = Workbook.createWorkbook( new  File("new_workbook.xls"), in_wb);
        s = out_wb.getSheet( 0 );
        
        setvar("CELL1", "qweqwe");
        setvar("CELL1", "11111");
        close();
    }
    
     public   static   void  close()  throws  IOException, WriteException
    {
        out_wb.write();
        out_wb.close();
        in_wb.close();
    }
    
     public   static   void  setvar(String varName, String varValue)  throws  WriteException
    {
        c = s.findLabelCell("{" + varName + "}");

        cf =  new  WritableCellFormat(c.getCellFormat());
        labelC =  new  Label(c.getColumn(), c.getRow(), "");
        labelC.setCellFormat(cf);
        
        labelC.setString(varValue);
        s.addCell(labelC);
    }
}

Когда в main() вызывают метод setvar() для одной и той же ячейки:
Код: plaintext
1.
2.
        setvar("CELL1", "qweqwe");
        setvar("CELL1", "11111");

То получаю сообщение:
Exception in thread "main" java.lang.NullPointerException
at excel2.Main.setvar(Main.java:58)
at excel2.Main.main(Main.java:43)
Java Result: 1

43: setvar("CELL1", "11111"); (второй вызов)
58: cf = new WritableCellFormat(c.getCellFormat());

Если же второй вызов метода использует другую ячейку, то ошибки нет:
Код: plaintext
1.
2.
        setvar("CELL1", "qweqwe");
        setvar("CELL2", "11111");

Про что нужно почитать, чтобы от этого избавиться?
Переопределение объектов какое-нибудь?
...
Рейтинг: 0 / 0
non-static variable cannot be referecned from a static context
    #34643652
Juga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
научись пользоваться дебагером многие вопросы отпадут
...
Рейтинг: 0 / 0
non-static variable cannot be referecned from a static context
    #34643655
y3u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
где и что читать тебе сказали, читай основы, где их искать - ищи тут на форуме поиском и в прилепленом топике...

естественно у тебя будет падать налл поинтер, ты в коде ни где не инициализируешь переменную Cell c;, она у тебя всегда null, а ты пытаешься у нее дергать какие-то методы...
...
Рейтинг: 0 / 0
non-static variable cannot be referecned from a static context
    #34643670
DDT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
y3u
естественно у тебя будет падать налл поинтер, ты в коде ни где не инициализируешь переменную Cell c;, она у тебя всегда null, а ты пытаешься у нее дергать какие-то методы...

А вот это:
Код: plaintext
c = s.findLabelCell("{" + varName + "}");
...
Рейтинг: 0 / 0
non-static variable cannot be referecned from a static context
    #34643672
y3u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
точнее инициализируешь, но метод тебе возвращает null
...
Рейтинг: 0 / 0
non-static variable cannot be referecned from a static context
    #34643689
DDT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
y3uточнее инициализируешь, но метод тебе возвращает null

вижу, спасибо.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / non-static variable cannot be referecned from a static context
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]