2014-01-04 3 views
-6

Эта проблема кажется очень распространенной, но я не смог найти решение для моей проблемы. Ну, может быть, если бы я не был так n00bish при программировании, я бы все понял и решил бы проблему.JAVA- JFrame-не статический метод не может ссылаться на статический контекст

Во всяком случае, вот код:

package kalk; 

import java.awt.Toolkit; 
import javax.swing.JOptionPane; 

/** 
* 
* @author BADASS BOSS 
*/ 
public class Kalkulator extends javax.swing.JFrame { 

    /** 
    * Creates new form Kalkulator 
    */ 
    private double liczba1, liczba2; 
    private double wynik=0; 
    private int nrdzialania=0; 
    private boolean dopierwszej=true; 
    private Toolkit glownytoolkit; 
    //dzialania 
    //1-dodawanie 
    //2-odejmowanie 
    //3-mnozenie 
    //4-dzielenie 
    private double pobierzliczbe(String s) 
    { 
     double temp;   
     temp = 0; 
     try 
     { 
      temp = Double.valueOf(s); 
     } 
     catch(Exception e) 
     { 
      JOptionPane.showMessageDialog(this, "FATAL ERROR!!" + e,"Coś się zepsuło!!!!", JOptionPane.ERROR_MESSAGE); 
     } 
     return temp; 
    } 
    private void robdzialanie() 
    { 
     String bufor; 
     liczba1 = pobierzliczbe(jTextField1.getText()); 
     liczba2 = pobierzliczbe(jTextField3.getText()); 
     bufor = ""; 
     if (nrdzialania==1) wynik = liczba1 + liczba2; 
     else if (nrdzialania==2) wynik = liczba1 - liczba2; 
     else if (nrdzialania==3) wynik = liczba1 * liczba2; 
     else if (nrdzialania==4) 
     { 
      if (liczba2==0) bufor="FATAL ERROR!! Nie można dzielić przez zero!!!"; 
      else wynik = liczba1/liczba2; 
     } 
     if (nrdzialania!=0) bufor = String.valueOf(wynik); 
     else bufor = "FATAL ERROR!! Argument jest pusty albo niepoprawny!!"; 
     jTextField4.setText(bufor); 
    } 
    public Kalkulator() { 
     initComponents(); 
     glownytoolkit = Toolkit.getDefaultToolkit(); 
    } 
    private void dajnasrodek() 
    { 
     int x; 
     int y; 
     int szerokość_ekranu; 
     int wysokość_ekranu; 
     int wysokość_ramki; 
     int szerokość_ramki; 
     szerokość_ekranu = glownytoolkit.getScreenSize().width; 
     wysokość_ekranu = glownytoolkit.getScreenSize().height; 
     szerokość_ramki = this.getSize().width; 
     wysokość_ramki = this.getSize().height; 
     x = (szerokość_ekranu - szerokość_ramki)/2; 
     y = (wysokość_ekranu - wysokość_ramki)/2; 
     this.setLocation(x, y); 
    } 
    /** 
    * This method is called from within the constructor to initialize the form. 
    * WARNING: Do NOT modify this code. The content of this method is always 
    * regenerated by the Form Editor. 
    */ 
    @SuppressWarnings("unchecked") 
    // <editor-fold defaultstate="collapsed" desc="Generated Code">       
    private void initComponents() { 


////some unnecessary stuff I guess 



    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String args[]) { 
     /* Set the Nimbus look and feel */ 
     //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> 
     /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. 
     * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
     */ 
     try { 
      for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { 
       if ("Nimbus".equals(info.getName())) { 
        javax.swing.UIManager.setLookAndFeel(info.getClassName()); 
        break; 
       } 
      } 
     } catch (ClassNotFoundException ex) { 
      java.util.logging.Logger.getLogger(Kalkulator.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (InstantiationException ex) { 
      java.util.logging.Logger.getLogger(Kalkulator.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (IllegalAccessException ex) { 
      java.util.logging.Logger.getLogger(Kalkulator.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (javax.swing.UnsupportedLookAndFeelException ex) { 
      java.util.logging.Logger.getLogger(Kalkulator.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } 
     //</editor-fold> 

     /* Create and display the form */ 
     //Kalkulator gc = new Kalkulator(); 
     //gc.dajnasrodek(); 
     java.awt.EventQueue.invokeLater(new Runnable() { 
      public void run() { 
      } 
      } 

     ); 
     //Kalkulator gc = new Kalkulator(); 
     //gc.dajnasrodek(); 
     //ActionEvent klik; 
     //jButton18ActionPerformed();  
    } 

    // Variables declaration - do not modify      
    private javax.swing.JButton jButton1; 
    private javax.swing.JButton jButton10; 
    ///some unnecessary stuff     
} 

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

Хорошо, так вот сделка: когда я пытаюсь ссылаться на dajnasrodek(); из основного метода, я получаю ошибку, как показано в заголовке - non static method cannot be referenced from a static context. Я попытался изменить метод dajnasrodek() на статический, но это не помогло, так как вместо него появляются другие ошибки.

Любые умные идеи? Любая помощь будет очень оценена! Заранее большое спасибо!!

+0

В какой строке указана ошибка? Я попытался бы скомпилировать его сам, но я не настроен на то, что вы используете, и я не буду возиться со своими настройками, чтобы ответить на этот вопрос. (Вероятно, это будет закрыто, прежде чем я смогу ввести свой ответ в любом случае) –

+0

Это то, чего я ожидал. Ну, я хочу ссылаться на метод dajnasrodek() из основного метода, но я даже не знаю, где его разместить ... Вы хотя бы знаете, что я имею в виду? Я могу казаться очень неясным в этом, поскольку я новичок в программировании. – user3161354

+0

Или, проще говоря, метод dajnasrodek() означает «центрировать экран», и все, что я хочу сделать, - сделать программу автоматически центрировать экран после запуска. Любые идеи, как это сделать? Метод dajnasrodek() - это алгоритм, который я хочу запустить, но пока не повезло – user3161354

ответ

0

Не ставьте свой код в основной метод. Вместо этого я помещал его в конструктор класса для класса, который содержит основной метод, в вашем случае Kalkulator. Затем создайте экземпляр Kalkulator в основном методе. Kalkulator не будет статичным, поэтому вы не получите это сообщение. Если вы хотите узнать, почему вы получаете эту ошибку, это потому, что основной метод объявлен как статический, и, как указывает ошибка, статическая вещь не может получить доступ к чему-то не статическому. Проверьте this.

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