2013-11-19 2 views
-1

Я пытаюсь вызвать мой метод createFile из класса OpenFile в моем основном методе, но я продолжаю получать ошибку, говоря, что я не могу вызывать нестатическую переменную из статический контекст.Нестационарная переменная не может ссылаться из статического контекста

Я попытался вызов OpenFile of = new OpenFile(); внутри мой основного метода, но это не сработало, так что я в настоящее время декларирования OpenFile над моим основным методом, который прекрасно работает, однако каждый раз, когда я пытаюсь использовать один из OpenFile сек методы, которые я получаю такая же ошибка.

Я пробовал предицировать несколько вещей с помощью static, но это просто заставляет мою среду IDE отображать ошибку Erroneous sym type, которая, как я думаю, вызвана тем, что вызывает другую ошибку.

Вот createFile из OpenFile:

public class OpenFile { 

    private Formatter file; 

    public void createFile() throws FileNotFoundException{ 

     try{ 
      file = new Formatter("test.txt"); 
     } catch(Exception e) { 
      System.out.println("Error creating file."); 
    } 
    } 

и вот мой основной метод:

OpenFile of = new OpenFile(); 

public static void main(String[] args) { 
    // TODO code application logic here 

    of.createFile(); 
    intro(); 
    createAndShowRibbon(); 
    createAndShowNormalUI(); 

} 

Это что-то делать с Formatter? Я никогда не использовал его раньше.

Спасибо.

+0

http://stackoverflow.com/a/6730716/2864740, http://stackoverflow.com/a/4308942/2864740, http://stackoverflow.com/a/7638196/2864740 – user2864740

+0

Пожалуйста, найдите сначала. Это не имеет никакого отношения к типу Formatter. – user2864740

+0

Слишком фундаментальный вопрос, нужно сначала изучить, я тоже :( – Jayasagar

ответ

5
OpenFile of = new OpenFile(); 

должен быть

static OpenFile of = new OpenFile(); 

Вы к нему доступ из метода static void main. Если эта переменная не объявлена ​​static, она будет недоступна для метода, когда он статически выполняется.

+0

Кажется, что он запускается! Хотя он работает, когда я добавляю статику в 'OpenFile', но только когда я также добавляю' throws FileNotFoundException' к основному методу, что с этим связано? – JmJ

+0

@JoshJahans: вы вызываете 'of.createFile();' который выбрасывает то же самое исключение, так как оно бросается туда вместо catch (используя 'try {} catch {}'), его нужно либо бросить, либо поймать в следующем методе 'main' в этом примере. –

+0

Я вижу , спасибо за вашу помощь! – JmJ

1

Следующие нестатические.

OpenFile of = new OpenFile(); 

Но вы вызываете его из основного метода, который является статическим.

Try изменение в:

static OpenFile of = new OpenFile(); 
2

Поскольку основного метода в Java является наиболее популярным методом среди всех новичков и они пытаются поставить программный код там они сталкиваются "non-static variable cannot be referenced from a static context" ошибки компилятора, когда они пытаются для доступа к нестационарному элементу переменная внутри main в Java, которая является статической.

Пожалуйста, обратите внимание на эту статью
Why non-static variable cannot be referenced from a static context?


В вашем случае вы должны сделать OpenFile of = new OpenFile(); экземпляра быть статичным, как, как показано ниже, чтобы получить доступ, что основной метод, который статический метод.

static OpenFile of = new OpenFile(); // should be static for accessing within main method 
public static void main(String[] args) { 

    of.createFile(); 
    intro(); 
    createAndShowRibbon(); 
    createAndShowNormalUI(); 

} 
1

в статическом методе и может вызывать методы класса или переменных, который является статическим , но и не может называть переменные экземпляра или метод в

Смежные вопросы

 Смежные вопросы