みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

java macとwindowsの互換

以前windowsを使用していてmacに乗り換えた者です。
ある日、プログラミングをしているとwindowsでできていた、プログラムが正常にmacでは反応しませんでした。自分プログラムのせい?と思い、ネットにあるサンプルプログラムをいくつかコピペしてみても正常に反応しません。

windowsとmacでは、同じプログラムではダメなのでしょうか?
javaは、windowsとmacの互換性がないのでしょうか?
教えてください。お願いします。

投稿日時 - 2012-10-18 18:11:31

QNo.7754685

すぐに回答ほしいです

質問者が選んだベストアンサー

円記号とバックスラッシュですが、ちょっと複雑な事情があって。
プログラムでエスケープ文字として使われるものは、ASCIIコードで0x5cのものですが、
Windowsでは円マークです。

このコードには、Mac( や欧米フォント)ではバックスラッシュがわりあてられています。
# 正確に言うとややこしいので、詳しくは検索でもしてください。

半角の円マークには別のコードが割り当てられているので
バックスラッシュ"は、 "の文字そのものの意味。
円マーク" は、そのまま 円マークの後に"で文字列が終了、の意味になります。

この違いによって、"の対応がおかしくなって、
「文字列リテラルが閉じられていない」("の対応が合わない)
「\9632 は不正な文字です。」 ≠9632は ■ 。本当は文字列の中にあるべき文字が、プログラムの中に登場しているためのエラー
等となっているのです。

Macのキーボードから、Optionキーと同時に円マークキーを押すと入力できます。


# 最初からエラーメッセージが書いてあれば、昨日の段階でこの回答ができました。
# 1日無駄になったんです。

投稿日時 - 2012-10-19 20:44:02

ANo.4

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.3

とりあえず記載されたエラーの一部についてのみですが、
macではエスケープ文字は円マークではなくてバックスラッシュにしなければいけないのでは?

投稿日時 - 2012-10-19 11:50:31

ANo.2

> class com extends JFrame{
> public static void main(String args[]) {
>
> JFrame frame = new JFrame("新しいコンポーネントを追加したウィンドウ");
> frame.setVisible(true);
> }

これじゃ、Windowsだろうと思うようにならないんじゃない?
JFrameのインスタンス生成して表示してるだけだから
comのインスタンス生成しないと。

JFrame frame = new com();
frame.setTitle("新しいコンポーネントを追加したウィンドウ");
frame.setVisible(true);

じゃないのか?

投稿日時 - 2012-10-19 11:26:40

補足

回答ありがとうございます

回答内容についてですが、macの場合、オブジェクトを作るとき(ウィンドウの)は、JFrame frame = new JFrame(""); ではないと以下のようなコンパイルエラーが出てしまいます。⬇
com.java:12: シンボルを見つけられません。
シンボル: コンストラクタ com(java.lang.String)
場所 : com の クラス
JFrame frame = new com("新しいコンポーネントを追加したウィンドウ");
^
エラー 1 個

となります。

ウィンドウズでコンパイルする場合には、その逆(JFrame frame.........はできなくて、com c = new.........または、JF = com..でないと同じコンパイルエラーを起こす)になります。

投稿日時 - 2012-10-19 20:11:15

ANo.1

具体的に、何がどんな風に「反応しません」なのでしょうか?
何かエラーメッセージが出るとか、は無いのですか?
MacのOSのバージョンは?
Javaはインストールされていますか?

# 過去の質問もそうなのでが、具体的な症状が無いと、答えるほうも答えられません。

手許のMac(OS10.7.5, Java1.7.0u7)で、以前「勉強中」とあった
http://www.javadrive.jp/tutorial/jframe/index1.html
のサンプルをコンパイルして実行しましたが、実行例の通りに実行できています(WindowsとMacのGUIのデザインの違いはありますが)


基本的に、違いはありません。
ただし、OSに依存するライブラリとか、JNIを使って特定環境用ネイティブコードで書かれたライブラリとかは動作しません。

MacのOSバージョンによって(10.7以降)はJavaをインストールする必要があります。
http://www.java.com/ja/download/faq/java_mac.xml

システムのディレクトリ構成、パスの指定など、Windows用の資料がそのまま使えないものがあります。
例えば、よくある「PATHにC:\Program Files\Java~を追加」などの設定は、Macでは意味がありません。

投稿日時 - 2012-10-18 19:32:26

補足

回答ありがとうございます。
私の過去の質問もみてくださってとてもありがたいです。

まず、私のmacの詳細⬇
Mac OS Xのバージョン 10.7.5
プロセッサ 2.7GHz Intel Core i5
メモリ 12GB
です。

java⬇
JDK 7 Update 07.pkg
です。

エラーの詳細⬇
このプログラムをコピペしました。⬇
URLhttp://www.javadrive.jp/tutorial/appli_word/index7.html
TextPaneTest.javaのコンパイルエラー⬇

TextPaneTest.java:179: 文字列リテラルが閉じられていません。
sb.append("<html><font color=¥"");
^
TextPaneTest.java:181: \9632 は不正な文字です。
sb.append("¥">■</font></html>");
^
TextPaneTest.java:181: 式の開始が不正です。
sb.append("¥">■</font></html>");
^
TextPaneTest.java:181: 型の開始が不正です。
sb.append("¥">■</font></html>");
^
TextPaneTest.java:181: 式の開始が不正です。
sb.append("¥">■</font></html>");
^
TextPaneTest.java:181: 文字列リテラルが閉じられていません。
sb.append("¥">■</font></html>");
^
TextPaneTest.java:181: 文ではありません。
sb.append("¥">■</font></html>");
^
TextPaneTest.java:346: class、interface、または enum がありません。
RtfFilter.java :
^
TextPaneTest.java:349: class、interface、または enum がありません。
import javax.swing.*;
^
TextPaneTest.java:350: class、interface、または enum がありません。
import javax.swing.filechooser.*;
^
エラー 10 個
です。

私のプログラムです。⬇

//Compornent

import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.BorderLayout;
import java.awt.Color;


class com extends JFrame{
public static void main(String args[]) {

JFrame frame = new JFrame("新しいコンポーネントを追加したウィンドウ");
frame.setVisible(true);
}

com() {
setBounds(100,100,600,400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JPanel p1 = new JPanel();
p1.setBackground(Color.black);
add(p1);
}
}
コンパイルすると次のエラーが出ます。⬇
・パネルの色を黒に設定しているのに、黒にならない。
・setBoundsが働いてない。(ウィンドウの大きさも位置も0になってる。)
です。

投稿日時 - 2012-10-18 22:36:50

あなたにオススメの質問