我似乎无法在我的程序中找到错误,在 Eclipse 中它说我的 jpegcallback 无法解析?

发布于 2024-12-17 09:55:06 字数 8896 浏览 0 评论 0原文

我正在处理这段代码,在我的第一个 .java 文件中,我在带有箭头的行上收到一个错误,它表示 jpegcallback 无法解析,但它在那里定义得很清楚。我一直在计算结束},但我在最后一行收到一个错误,说没有足够的,我是否计数过多了?

 package com.example;

 import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.io.IOException;

 import android.app.Activity;
 import android.hardware.Camera;
 import android.hardware.Camera.PictureCallback;
 import android.hardware.Camera.ShutterCallback;
 import android.os.Bundle;
 import android.util.Log;
 import android.view.View;
 import android.view.View.OnClickListener;
 import android.widget.Button;
 import android.widget.FrameLayout;
 import android.speech.*;


public class CameraDemo extends Activity {
private static final String TAG = "CameraDemo";
Camera camera;
Preview preview;
Button buttonClick;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    preview = new Preview(this);
    ((FrameLayout) findViewById(R.id.preview)).addView(preview);

    buttonClick = (Button) findViewById(R.id.buttonClick);
    buttonClick.setOnClickListener( new OnClickListener() 
    {
        public void onClick(View v) 
        {
--------->              preview.camera.takePicture(shutterCallback, rawCallback, jpegCallback);
        }
    });

    Log.d(TAG, "onCreate'd");
}


ShutterCallback shutterCallback = new ShutterCallback() 
{
    public void onShutter() 
    {
        Log.d(TAG, "onShutter'd");
    }
};

/** Handles data for raw picture */
PictureCallback rawCallback = new PictureCallback() 
{
    public void onPictureTaken(byte[] data, Camera camera) 
    {
        Log.d(TAG, "onPictureTaken - raw");
    }

/** Handles data for jpeg picture */
PictureCallback jpegCallback = new PictureCallback() 
{
    public void onPictureTaken(byte[] data, Camera camera) 
    {
        FileOutputStream outStream = null;
        try 
        {
                // write to local sandbox file system
 //         
            outStream = CameraDemo.this.openFileOutput      (String.format      ("%     d.jpg", System.currentTimeMillis()), 0);    
            // Or write to sdcard
            outStream = new FileOutputStream(String.format("/sdcard/%d.jpg", System.currentTimeMillis()));  
            outStream.write(data);
            outStream.close();
            Log.d(TAG, "onPictureTaken - wrote bytes: " + data.length);
        } 
        catch (FileNotFoundException e) 
        {
            e.printStackTrace();
        } 
        catch (IOException e) 
        {
            e.printStackTrace();
        } 
        finally 
        {
        }
        Log.d(TAG, "onPictureTaken - jpeg");
    }

    @Override 
    protected void 
            onActivityResult(int requestCode, int resultCode, Intent data) 
    { 
        if (requestCode == VOICE_RECOGNITION_REQUEST_CODE) 
        { 
            if (resultCode == RESULT_OK) 
            { 
                List<String> heard = 
                        data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); 
                for (int i = 0; i < heard.size(); i++) 
                { 
                    Log.d(TAG, i + ": " + heard.get(i)); 
                } 
                receiveWhatWasHeard(heard); 
            } 
            else 
            { 
//fail 
            } 
        } 
        super.onActivityResult(requestCode, resultCode, data); 
    } 
};

protected void receiveWhatWasHeard(List<String> heard) 
{ 
    WordDictionary command = new WordDictionary("Add"); 
    for (String said : heard) 
    { 
        if (command.isIn(said.split("\\s"))) 
        { 
            Log.d(TAG, "heard add"); 
        } 
    } 
} 


public class WordDictionary 
{ 
    private Set<String> words; 

    public WordDictionary(String... wordsIn) 
    { 
        this(Arrays.asList(wordsIn)); 
    } 

    public WordDictionary(List<String> wordsIn) 
    { 
        words = new LinkedHashSet<String>(wordsIn); 
    } 

    public Set<String> getWords() 
    { 
        return words; 
    } 

    public boolean isIn(String word) 
    { 
        return words.contains(word); 
    } 

    public boolean isIn(String [] wordsIn) 
    { 
        boolean wordIn = false; 
        for (String word : wordsIn) 
        { 
            if (isIn(word)) 
            { 
                wordIn = true; 
                break; 
            } 
        } 
        return wordIn; 
        }
}

preview.java

package com.example;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.hardware.Camera;
import android.hardware.Camera.PreviewCallback;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;


class Preview extends SurfaceView implements SurfaceHolder.Callback {
 private static final String TAG = "Preview";

SurfaceHolder mHolder;
public Camera camera;

Preview(Context context) {
    super(context);

    // Install a SurfaceHolder.Callback so we get notified when the
    // underlying surface is created and destroyed.
    mHolder = getHolder();
    mHolder.addCallback(this);
    mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}

public void surfaceCreated(SurfaceHolder holder) {
    // The Surface has been created, acquire the camera and tell it where
    // to draw.
    camera = Camera.open();
    try {
        camera.setPreviewDisplay(holder);


        camera.setPreviewCallback(new PreviewCallback() {

            public void onPreviewFrame(byte[] data, Camera arg1) {
                FileOutputStream outStream = null;
                try {
                    outStream = new FileOutputStream(String.format("/sdcard/%d.jpg", System.currentTimeMillis()));  
                    outStream.write(data);
                    outStream.close();
                    Log.d(TAG, "onPreviewFrame - wrote bytes: " + data.length);
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                } finally {
                }
                    Preview.this.invalidate();
            }
        });
    } catch (IOException e) {
        e.printStackTrace();
    }
}

public void surfaceDestroyed(SurfaceHolder holder) {
    // Surface will be destroyed when we return, so stop the preview.
    // Because the CameraDevice object is not a shared resource, it's very
    // important to release it when the activity is paused.
    camera.stopPreview();
    camera = null;
}

public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
    // Now that the size is known, set up the camera parameters and begin
    // the preview.
    Camera.Parameters parameters = camera.getParameters();
    parameters.setPreviewSize(w, h);
    camera.setParameters(parameters);
    camera.startPreview();
}

@Override
public void draw(Canvas canvas) {
        super.draw(canvas);
        Paint p= new Paint(Color.RED);
        Log.d(TAG,"draw");
        canvas.drawText("PREVIEW", canvas.getWidth()/2, canvas.getHeight()/2, p );
}
}
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:id="@+id/layout">
<TextView android:layout_width="fill_parent"
    android:layout_height="wrap_content" android:text="VoCam"
    android:textSize="24sp" />

<FrameLayout android:id="@+id/preview"
    android:layout_weight="1" android:layout_width="fill_parent"
    android:layout_height="fill_parent">
</FrameLayout>

<Button android:layout_width="wrap_content"
    android:layout_height="wrap_content" android:id="@+id/buttonClick"
    android:text="Listening" android:layout_gravity="center"></Button>

</LinearLayout>

manifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example" android:versionCode="1" android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:name=".CameraDemo" android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

</application>
<uses-sdk android:minSdkVersion="7" />

<uses-permission android:name="android.permission.CAMERA" />
</manifest> 

I am working on this code, and inside my first .java file I get an error on the line with the arrow, it, it says jpegcallback can't be resolved, but its defined there clearly. I have been counting the closing } and i get an error on the last line saying that there isn't enough, am i over counting?

 package com.example;

 import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.io.IOException;

 import android.app.Activity;
 import android.hardware.Camera;
 import android.hardware.Camera.PictureCallback;
 import android.hardware.Camera.ShutterCallback;
 import android.os.Bundle;
 import android.util.Log;
 import android.view.View;
 import android.view.View.OnClickListener;
 import android.widget.Button;
 import android.widget.FrameLayout;
 import android.speech.*;


public class CameraDemo extends Activity {
private static final String TAG = "CameraDemo";
Camera camera;
Preview preview;
Button buttonClick;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    preview = new Preview(this);
    ((FrameLayout) findViewById(R.id.preview)).addView(preview);

    buttonClick = (Button) findViewById(R.id.buttonClick);
    buttonClick.setOnClickListener( new OnClickListener() 
    {
        public void onClick(View v) 
        {
--------->              preview.camera.takePicture(shutterCallback, rawCallback, jpegCallback);
        }
    });

    Log.d(TAG, "onCreate'd");
}


ShutterCallback shutterCallback = new ShutterCallback() 
{
    public void onShutter() 
    {
        Log.d(TAG, "onShutter'd");
    }
};

/** Handles data for raw picture */
PictureCallback rawCallback = new PictureCallback() 
{
    public void onPictureTaken(byte[] data, Camera camera) 
    {
        Log.d(TAG, "onPictureTaken - raw");
    }

/** Handles data for jpeg picture */
PictureCallback jpegCallback = new PictureCallback() 
{
    public void onPictureTaken(byte[] data, Camera camera) 
    {
        FileOutputStream outStream = null;
        try 
        {
                // write to local sandbox file system
 //         
            outStream = CameraDemo.this.openFileOutput      (String.format      ("%     d.jpg", System.currentTimeMillis()), 0);    
            // Or write to sdcard
            outStream = new FileOutputStream(String.format("/sdcard/%d.jpg", System.currentTimeMillis()));  
            outStream.write(data);
            outStream.close();
            Log.d(TAG, "onPictureTaken - wrote bytes: " + data.length);
        } 
        catch (FileNotFoundException e) 
        {
            e.printStackTrace();
        } 
        catch (IOException e) 
        {
            e.printStackTrace();
        } 
        finally 
        {
        }
        Log.d(TAG, "onPictureTaken - jpeg");
    }

    @Override 
    protected void 
            onActivityResult(int requestCode, int resultCode, Intent data) 
    { 
        if (requestCode == VOICE_RECOGNITION_REQUEST_CODE) 
        { 
            if (resultCode == RESULT_OK) 
            { 
                List<String> heard = 
                        data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); 
                for (int i = 0; i < heard.size(); i++) 
                { 
                    Log.d(TAG, i + ": " + heard.get(i)); 
                } 
                receiveWhatWasHeard(heard); 
            } 
            else 
            { 
//fail 
            } 
        } 
        super.onActivityResult(requestCode, resultCode, data); 
    } 
};

protected void receiveWhatWasHeard(List<String> heard) 
{ 
    WordDictionary command = new WordDictionary("Add"); 
    for (String said : heard) 
    { 
        if (command.isIn(said.split("\\s"))) 
        { 
            Log.d(TAG, "heard add"); 
        } 
    } 
} 


public class WordDictionary 
{ 
    private Set<String> words; 

    public WordDictionary(String... wordsIn) 
    { 
        this(Arrays.asList(wordsIn)); 
    } 

    public WordDictionary(List<String> wordsIn) 
    { 
        words = new LinkedHashSet<String>(wordsIn); 
    } 

    public Set<String> getWords() 
    { 
        return words; 
    } 

    public boolean isIn(String word) 
    { 
        return words.contains(word); 
    } 

    public boolean isIn(String [] wordsIn) 
    { 
        boolean wordIn = false; 
        for (String word : wordsIn) 
        { 
            if (isIn(word)) 
            { 
                wordIn = true; 
                break; 
            } 
        } 
        return wordIn; 
        }
}

preview.java

package com.example;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.hardware.Camera;
import android.hardware.Camera.PreviewCallback;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;


class Preview extends SurfaceView implements SurfaceHolder.Callback {
 private static final String TAG = "Preview";

SurfaceHolder mHolder;
public Camera camera;

Preview(Context context) {
    super(context);

    // Install a SurfaceHolder.Callback so we get notified when the
    // underlying surface is created and destroyed.
    mHolder = getHolder();
    mHolder.addCallback(this);
    mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}

public void surfaceCreated(SurfaceHolder holder) {
    // The Surface has been created, acquire the camera and tell it where
    // to draw.
    camera = Camera.open();
    try {
        camera.setPreviewDisplay(holder);


        camera.setPreviewCallback(new PreviewCallback() {

            public void onPreviewFrame(byte[] data, Camera arg1) {
                FileOutputStream outStream = null;
                try {
                    outStream = new FileOutputStream(String.format("/sdcard/%d.jpg", System.currentTimeMillis()));  
                    outStream.write(data);
                    outStream.close();
                    Log.d(TAG, "onPreviewFrame - wrote bytes: " + data.length);
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                } finally {
                }
                    Preview.this.invalidate();
            }
        });
    } catch (IOException e) {
        e.printStackTrace();
    }
}

public void surfaceDestroyed(SurfaceHolder holder) {
    // Surface will be destroyed when we return, so stop the preview.
    // Because the CameraDevice object is not a shared resource, it's very
    // important to release it when the activity is paused.
    camera.stopPreview();
    camera = null;
}

public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
    // Now that the size is known, set up the camera parameters and begin
    // the preview.
    Camera.Parameters parameters = camera.getParameters();
    parameters.setPreviewSize(w, h);
    camera.setParameters(parameters);
    camera.startPreview();
}

@Override
public void draw(Canvas canvas) {
        super.draw(canvas);
        Paint p= new Paint(Color.RED);
        Log.d(TAG,"draw");
        canvas.drawText("PREVIEW", canvas.getWidth()/2, canvas.getHeight()/2, p );
}
}
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:id="@+id/layout">
<TextView android:layout_width="fill_parent"
    android:layout_height="wrap_content" android:text="VoCam"
    android:textSize="24sp" />

<FrameLayout android:id="@+id/preview"
    android:layout_weight="1" android:layout_width="fill_parent"
    android:layout_height="fill_parent">
</FrameLayout>

<Button android:layout_width="wrap_content"
    android:layout_height="wrap_content" android:id="@+id/buttonClick"
    android:text="Listening" android:layout_gravity="center"></Button>

</LinearLayout>

manifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example" android:versionCode="1" android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:name=".CameraDemo" android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

</application>
<uses-sdk android:minSdkVersion="7" />

<uses-permission android:name="android.permission.CAMERA" />
</manifest> 

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

海螺姑娘 2024-12-24 09:55:06

看起来您在 rawCallBack 上没有右大括号,因此它有点“消耗”jpeg 回调(请参阅此处插入大括号行)

/** Handles data for raw picture */
PictureCallback rawCallback = new PictureCallback() 
{
    public void onPictureTaken(byte[] data, Camera camera) 
    {
        Log.d(TAG, "onPictureTaken - raw");
    }
}; <-------------INSERT BRACE HERE
/** Handles data for jpeg picture */
PictureCallback jpegCallback = new PictureCallback() 
{
    public void onPictureTaken(byte[] data, Camera camera) 
    {
        FileOutputStream outStream = null;
        try 
        {
                // write to local sandbox file system
 //         
            outStream = CameraDemo.this.openFileOutput      (String.format      ("%     d.jpg", System.currentTimeMillis()), 0);    
            // Or write to sdcard

It looks like you don't have a closing brace on rawCallBack, so it kind of "consumes" jpeg callback (SEE INSERT BRACE HERE LINE)

/** Handles data for raw picture */
PictureCallback rawCallback = new PictureCallback() 
{
    public void onPictureTaken(byte[] data, Camera camera) 
    {
        Log.d(TAG, "onPictureTaken - raw");
    }
}; <-------------INSERT BRACE HERE
/** Handles data for jpeg picture */
PictureCallback jpegCallback = new PictureCallback() 
{
    public void onPictureTaken(byte[] data, Camera camera) 
    {
        FileOutputStream outStream = null;
        try 
        {
                // write to local sandbox file system
 //         
            outStream = CameraDemo.this.openFileOutput      (String.format      ("%     d.jpg", System.currentTimeMillis()), 0);    
            // Or write to sdcard
三生一梦 2024-12-24 09:55:06

在您的声明 PictureCallback rawCallBack 中,您似乎在 onPictureTaken 方法之后缺少右大括号 (})。

in your declaration PictureCallback rawCallBack, it seems you are missing a closing brace (}) just after the onPictureTaken method.

傾旎 2024-12-24 09:55:06

您想在此处关闭 }​​:

/** Handles data for raw picture */ 
PictureCallback rawCallback = new PictureCallback()  {  
    public void onPictureTaken(byte[] data, Camera camera) { 
     Log.d(TAG, "onPictureTaken - raw");
     } 
}  //---------------------in this line :)!---------------

You want to close the } here:

/** Handles data for raw picture */ 
PictureCallback rawCallback = new PictureCallback()  {  
    public void onPictureTaken(byte[] data, Camera camera) { 
     Log.d(TAG, "onPictureTaken - raw");
     } 
}  //---------------------in this line :)!---------------
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文