2011-05-31 99 views
0

我是一个Java新手,所以请耐心等待我的帮助。非静态变量不能从静态上下文中引用

我打算先录音然后录音。

我使用netbeans IDE 6.8。这里是代码:

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 
import java.io.*; 
import javax.sound.sampled.*; 
import java.awt.event.KeyListener; 
import java.io.File; 
import java.io.IOException; 


public class Reg1 extends javax.swing.JFrame { 
    AudioFormat audioFormat; 
    TargetDataLine targetDataLine; 
     public Reg1() { 
     initComponents(); 
    } 

    /** 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() { 

     jButton1 = new javax.swing.JButton(); 

     setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 

     jButton1.setText("Stop"); 
     jButton1.addMouseListener(new java.awt.event.MouseAdapter() { 
      public void mouseReleased(java.awt.event.MouseEvent evt) { 
       jButton1MouseReleased(evt); 
      } 
     }); 

     javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
     getContentPane().setLayout(layout); 
     layout.setHorizontalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() 
       .addContainerGap(211, Short.MAX_VALUE) 
       .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 135, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addGap(237, 237, 237)) 
     ); 
     layout.setVerticalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() 
       .addContainerGap(287, Short.MAX_VALUE) 
       .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 109, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addGap(65, 65, 65)) 
     ); 

     pack(); 
    }// </editor-fold> 

    private void jButton1MouseReleased(java.awt.event.MouseEvent evt) { 

     targetDataLine.stop(); 
     targetDataLine.close(); 

    } 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String args[]) { 
     java.awt.EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       new Reg1(); 
      } 
      private void Reg1(){ 

       KeyListener s; 

       try { 
      AudioInputStream audio = AudioSystem.getAudioInputStream(new File("name.wav")); 
      Clip clip = AudioSystem.getClip(); 
      clip.open(audio); 
      clip.start(); 
     } 

     catch(UnsupportedAudioFileException uae) { 
      System.out.println(uae); 
     } 
     catch(IOException ioe) { 
      System.out.println(ioe); 
     } 
     catch(LineUnavailableException lua) { 
      System.out.println(lua); 
     } 
       captureAudio(); 

      } 
     }); 
    } 
    private void captureAudio(){ 
    try{ 

     audioFormat = getAudioFormat(); 
     DataLine.Info dataLineInfo = new DataLine.Info(TargetDataLine.class,audioFormat); 
     targetDataLine = (TargetDataLine) 
       AudioSystem.getLine(dataLineInfo); 


     new CaptureThread().start(); 
    }catch (Exception e) { 
     e.printStackTrace(); 
     System.exit(0); 
    } 
    } 


    public static AudioFormat getAudioFormat(){ 

    float sampleRate = 8000.0F;  
    int sampleSizeInBits = 16;  
    int channels = 1;  
    boolean signed = true;  
    boolean bigEndian = false; 
    return new AudioFormat(sampleRate, 
          sampleSizeInBits, 
          channels, 
          signed, 
          bigEndian); 
    } 

class CaptureThread extends Thread{ 

    public void run(){ 
    AudioFileFormat.Type fileType = null; 
    File audioFile = null; 
    fileType = AudioFileFormat.Type.WAVE; 
    audioFile = new File("name.wav"); 
    try{ 
     targetDataLine.open(audioFormat); 
     targetDataLine.start(); 
     AudioSystem.write(
      new AudioInputStream(targetDataLine), 
      fileType, 
      audioFile); 
    }catch (Exception e){ 
     e.printStackTrace(); 
    } 

    } 
} 


    // Variables declaration - do not modify 
    private javax.swing.JButton jButton1; 
    // End of variables declaration 

} 

请给出具体的方向,因为我是Java编程的noob。

+1

编译器在哪一行抱怨? – 2011-05-31 09:18:04

+1

这是很多代码 - 你能更具体地说明哪一行导致错误?这通常由相关链接来判断,你是否阅读过这些内容? – 2011-05-31 09:19:03

+1

这是相当明显的调用'captureAudio()'的'的main()'方法,以及其他潜在的问题 – 2011-05-31 09:23:23

回答

2

静态意味着没有对象(类的实例,如new YourClass())。如果你有一个静态函数,它应该是“独立的”,所以它不能使用非静态的东西,因为它们使用真实对象中的东西(如成员变量等)

任何static函数只能调用并使用其他static函数。所以在那个环境中寻找麻烦。

+0

thanksthanksthanks亚勒...它解决 – 2011-06-02 08:40:24

3

虽然可能有更正式的资源来解释这种(如Java语言规范),我经常发现自己检查这个网页,这些题型:

http://mindprod.com/jgloss/jgloss.html

它解释这些事情非常好,也为菜鸟;-) 你的情况:

+0

thanksthanks亚勒...它解决 – 2011-06-02 08:40:19

+0

@Karan,请“接受”最适合的答案,点击“接受”按钮 – 2011-06-02 09:57:56

2

更换你的主要有:

public static void main(String args[]) { 
    java.awt.EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      Reg1 r = new Reg1(); 
      try { 
       AudioInputStream audio = AudioSystem.getAudioInputStream(new File("name.wav")); 
       Clip clip = AudioSystem.getClip(); 
       clip.open(audio); 
       clip.start(); 
      } 
      catch (Exception e) { 
       System.out.println(e); 
      } 
      r.captureAudio(); 
     } 
    }); 
} 
+0

感谢亚勒......也就迎刃而解了 – 2011-06-02 08:40:06

3

我用了 “Java编辑器”,我试图编译你的类。我得到了错误masseage

Reg1.java:93:16:非静态方法captureAudio()不能从静态上下文

原因引用的是:您在方法调用 void main()一个方法,它需要一个对象的实例。如果一个方法不为静态宣布你需要follwoing语法“referenceObject.captureAudio()”

0

captureAudio()它是一个实例方法,它不能在main()没有对象称为是静态的不声明为static从而。

正弦我看你已经在Reg1的run methid新实例中创建了,因此对于此对象调用方法captureAudio()是好的。另外,不需要内置的private void Reg1()方法,它可以让你永远不会打电话。我建议你将main改为这样的东西。

public static void main(String args[]) 
    { 
     java.awt.EventQueue.invokeLater(new Runnable() 
     { 
      public void run() 
      { 
       Reg1 reg1 = new Reg1(); 
       KeyListener s;  
       try 
       { 
        AudioInputStream audio = AudioSystem.getAudioInputStream(new File("name.wav")); 
        Clip clip = AudioSystem.getClip(); 
        clip.open(audio); 
        clip.start(); 
       }catch(UnsupportedAudioFileException uae) 
       { 
        System.out.println(uae); 
       }catch(IOException ioe) 
       { 
        System.out.println(ioe); 
       }catch(LineUnavailableException lua) 
       { 
        System.out.println(lua); 
       } 
       reg1.captureAudio(); 
      } 
     }); 
    } 
+0

得益于它解决..我会所有的人继续在未来给你麻烦....... – 2011-06-02 08:38:41

相关问题