2015-02-24 137 views
0

我正在嘗試運行下面的代碼,但我不斷收到錯誤消息「類型不匹配:無法從布爾型轉換爲布爾型」。這對我來說尤其令人困惑,因爲:1)我不確定我在哪裏嘗試進行這種轉換,以及2)代碼在我用過的其他計算機上與Eclipse完美搭配。「類型不匹配:無法從布爾型轉換爲布爾型」

任何人都可以指出什麼問題可能在這裏?我很困惑。順便說一句,這些錯誤來自於這些行:

import java.awt.Dimension; 
import java.awt.image.BufferedImage; 
import java.awt.image.DataBufferByte; 

//import java.io.ByteArrayInputStream; 
//import java.io.InputStream; 
//import javax.imageio.ImageIO; 
import javax.swing.ImageIcon; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
//import javax.swing.plaf.ButtonUI; 
import javax.swing.WindowConstants; 

import org.opencv.core.Mat; 
import org.opencv.core.Size; 
import org.opencv.imgproc.Imgproc; 

public class Imshow { 

public JFrame Window; 
private ImageIcon image; 
private JLabel label; 
// private MatOfByte matOfByte; 
private Boolean SizeCustom; 
private int Height, Width; 

public Imshow(String title) { 
    Window = new JFrame(); 
    image = new ImageIcon(); 
    label = new JLabel(); 
    // matOfByte = new MatOfByte(); 
    label.setIcon(image); 
    Window.getContentPane().add(label); 
    Window.setResizable(false); 
    Window.setTitle(title); 
    SizeCustom = false; 
    setCloseOption(0); 
} 

public Imshow(String title, int height, int width) { 
    SizeCustom = true; 
    Height = height; 
    Width = width; 

    Window = new JFrame(); 
    image = new ImageIcon(); 
    label = new JLabel(); 
    // matOfByte = new MatOfByte(); 
    label.setIcon(image); 
    Window.getContentPane().add(label); 
    Window.setResizable(false); 
    Window.setTitle(title); 
    setCloseOption(0); 

} 

public void showImage(Mat img) { 
    if (SizeCustom) { 
     Imgproc.resize(img, img, new Size(Height, Width)); 
    } 
    // Highgui.imencode(".jpg", img, matOfByte); 
    // byte[] byteArray = matOfByte.toArray(); 
    BufferedImage bufImage = null; 
    try { 
     // InputStream in = new ByteArrayInputStream(byteArray); 
     // bufImage = ImageIO.read(in); 
     bufImage = toBufferedImage(img); 
     image.setImage(bufImage); 
     Window.pack(); 
     label.updateUI(); 
     Window.setVisible(true); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
+1

創建一個再現問題的最小示例。 – aioobe 2015-02-24 14:06:44

+0

它在構造函數中被設置爲「false」。這會使它非空嗎? – Zetland 2015-02-24 14:06:46

+3

哪條線給你這個錯誤? – SMA 2015-02-24 14:06:51

回答

4

'布爾' 和 '布爾' 是:

SizeCustom = false;

SizeCustom = true;

if (SizeCustom) {

在全碼

實際不同。 '布爾'是一個類,而'布爾'是一個基元。你有一個if語句檢查SizeCustom的'boolean'值,但SizeCustom是'布爾'。您可以執行以下兩項操作之一:

1)將SizeCustom更改爲'boolean'類型。

2)在'Boolean'類型的SizeCustom上使用'booleanValue()'方法來爲你的if語句獲取'boolean'值。

+0

Autoboxing應該照顧它。可能值得檢查JDK合規性級別的Eclipse項目設置 - 確保它大於等於1.5。 – Dan 2015-02-24 14:13:02

+0

解決它與1)。謝謝! – Zetland 2015-02-24 14:17:07

2

您有使用private Boolean SizeCustom的原因是private boolean SizeCustom嗎?如果沒有,最好將其更改爲boolean。布爾和布爾之間的區別在於,布爾是一個類,布爾是一個原語。

之前工作的原因是您可能在其他PC上使用了更新版本的JDK。自動裝箱(布爾值爲布爾值,反之亦然)是在JDK 1.5(Java 5)中引入的。如果你使用的是舊版本,那就是爲什麼它不起作用。

相關問題