1

ウェブカメラがあるかどうかを検出する機能を実装しています。このコードは Windows で問題なく動作し、Linux CentOS OS でも問題はありませんでした。今、Ubuntu で同じコードを実行しようとしていますが、ここで例外がスローされます。

Exception in thread "main" java.lang.NullPointerException
at CameraProperties.CheckForCameraPlugin.check(CheckForCameraPlugin.java:51)
at Main.Main.main(Main.java:39)

コードを以下に示します。

public boolean check() 
{ 
    boolean b = true;
    service = Executors.newFixedThreadPool(1);
    task = service.submit(new InitialCameraChecker());
    try 
    {
        final String str;
        // waits the 10 seconds for the Callable.call to finish.
        str = task.get();
        if (str.matches("nodevice"))
        {
            b = false;//Return false if no camera device found
        } 
        else 
        {
            b = true;
        }

    } 
    catch (InterruptedException | ExecutionException ex) 
    {            
        msgbox.showJoptionPane(15);
    }
    service.shutdownNow();
    return b;
}

呼び出し可能なクラスを以下に示します

class InitialCameraChecker implements Callable<String>
{
private List<Integer> devices = new ArrayList<Integer>();
private final static String VERSION_ID = "1.0.0";
private String res;

//Checking for the Camera 
public String call() 
{
    try 
    {
        loadWebcam();
        discoverDevices();
        if (devices.isEmpty()) 
        {                
            res = "nodevice";//No we cam device found
        } 
        else 
        {                
            res = "founddevice";//Found Web Cam Device
        }
    } 
    catch (Exception ex) 
    {
        System.out.println("Exception_logout" + ex.toString());
    }
    return res;
}


//Discovering the camera device
private void discoverDevices() 
{
    for (int i = 0; i < 10; i++)
    {
        CvCapture cap = null;
        try 
        {
            cap = cvCreateCameraCapture(i);
            int res = cvGrabFrame(cap);
            if (res > 0) 
            {
                devices.add(i);                    
                break;
            }
        } 
        catch (Exception e) 
        {
            System.out.println("Exception in camaracheck Thread1");
        } 
        finally 
        {
            if (cap != null) 
            {
                try 
                {
                    cvReleaseCapture(cap.pointerByReference());
                } 
                catch (Exception e) 
                {
                    e.printStackTrace();
                }
            }
        }
    }
}


//Loading the dlls for starting the camera
private void loadWebcam() 
{    
    String tmpDir = System.getProperty("java.io.tmpdir");        
    File faPath = new File(tmpDir + File.separator + "WebcamApplet_" + VERSION_ID.replaceAll("\\.", "-"));        
    System.setProperty("jna.library.path", faPath.getAbsolutePath());
}
}

何が問題なのか教えてください。これは Windows で正常に動作します。

4

0 に答える 0