私はEclipseを使ってJavaで書いたこのクールなプログラムを持っています。Eclipseで実行すると、想定どおりに動作します。jar ファイルとしてエクスポートしたので、Launch4j を使用して実行可能ファイル (.exe ファイル拡張子) に変換できましたが、実行可能ファイルを開こうとすると、プログラムに互換性がないと表示されます。コマンドラインでコードをコンパイルしようとしましたが、「Java Calculator」と入力してプログラムを実行しようとすると、完全に機能しました。私の質問は、実行可能ファイルが機能しないのはなぜですか? どんな助けでも大歓迎です。ソースコード全体を以下に示します。
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
public class Calculator implements ActionListener {
JFrame frame = new JFrame("Calculator");
JPanel panel = new JPanel(new GridLayout(4,4));
JTextArea text = new JTextArea(1,17);
JButton but1 = new JButton("1");
JButton but2 = new JButton("2");
JButton but3 = new JButton("3");
JButton but4 = new JButton("4");
JButton but5 = new JButton("5");
JButton but6 = new JButton("6");
JButton but7 = new JButton("7");
JButton but8 = new JButton("8");
JButton but9 = new JButton("9");
JButton but0 = new JButton("0");
JButton butadd = new JButton("+");
JButton butsub = new JButton("-");
JButton butmulti = new JButton("*");
JButton butdiv = new JButton("/");
JButton buteq = new JButton("=");
JButton butclear = new JButton("C");
double number1, number2, result;
int addc = 0, subc = 0, multic = 0, divc = 0;
public Calculator()
{
frame.setVisible(true);
frame.setSize(210,220);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
text.setEditable(false);
frame.add(panel);
frame.add(text, BorderLayout.NORTH);
panel.add(but1);
panel.add(but2);
panel.add(but3);
panel.add(but4);
panel.add(but5);
panel.add(but6);
panel.add(but7);
panel.add(but8);
panel.add(but9);
panel.add(but0);
panel.add(butadd);
panel.add(butsub);
panel.add(butmulti);
panel.add(butdiv);
panel.add(buteq);
panel.add(butclear);
but1.addActionListener(this);
but2.addActionListener(this);
but3.addActionListener(this);
but4.addActionListener(this);
but5.addActionListener(this);
but6.addActionListener(this);
but7.addActionListener(this);
but8.addActionListener(this);
but9.addActionListener(this);
but0.addActionListener(this);
butadd.addActionListener(this);
butsub.addActionListener(this);
butmulti.addActionListener(this);
butdiv.addActionListener(this);
buteq.addActionListener(this);
butclear.addActionListener(this);
}
public void colorChange(){
Random rand=new Random();
float r=rand.nextFloat();
float g= rand.nextFloat();
float b=rand.nextFloat();
Color randomColor=new Color(r,g,b);
but1.setBackground(randomColor);
but2.setBackground(randomColor);
but3.setBackground(randomColor);
but4.setBackground(randomColor);
but5.setBackground(randomColor);
but6.setBackground(randomColor);
but7.setBackground(randomColor);
but8.setBackground(randomColor);
but9.setBackground(randomColor);
but0.setBackground(randomColor);
butadd.setBackground(randomColor);
butsub.setBackground(randomColor);
butmulti.setBackground(randomColor);
butdiv.setBackground(randomColor);
butclear.setBackground(randomColor);
buteq.setBackground(randomColor);
but1.setForeground(Color.white);
but2.setForeground(Color.white);
but3.setForeground(Color.white);
but4.setForeground(Color.white);
but5.setForeground(Color.white);
but6.setForeground(Color.white);
but7.setForeground(Color.white);
but8.setForeground(Color.white);
but9.setForeground(Color.white);
but0.setForeground(Color.white);
butadd.setForeground(Color.white);
butsub.setForeground(Color.white);
butmulti.setForeground(Color.white);
butdiv.setForeground(Color.white);
butclear.setForeground(Color.white);
buteq.setForeground(Color.white);
}
@Override
public void actionPerformed(ActionEvent arg0)
{
Object source = arg0.getSource();
if(source == butclear)
{
number1 = 0.0;
number2 = 0.0;
text.setText("");
colorChange();
}
if(source == but1)
{
text.append("1");
}
if(source == but2)
{
text.append("2");
}
if(source == but3)
{
text.append("3");
}
if(source == but4)
{
text.append("4");
}
if(source == but5)
{
text.append("5");
}
if(source == but6)
{
text.append("6");
}
if(source == but7)
{
text.append("7");
}
if(source == but8)
{
text.append("8");
}
if(source == but9)
{
text.append("9");
}
if(source == but0)
{
text.append("0");
}
if(source == butadd)
{
number1 = numberReader();
text.setText("");
addc = 1;
subc = 0;
multic = 0;
divc = 0;
}
if(source == butsub)
{
number1 = numberReader();
text.setText("");
addc = 0;
subc = 1;
multic = 0;
divc = 0;
}
if(source == butmulti)
{
number1 = numberReader();
text.setText("");
addc = 0;
subc = 0;
multic = 1;
divc = 0;
}
if(source == butdiv)
{
number1 = numberReader();
text.setText("");
addc = 0;
subc = 0;
multic = 0;
divc = 1;
}
if(source == buteq)
{
number2 = numberReader();
if(addc > 0)
{
result = number1 + number2;
text.setText(Double.toString(result));
}
if(subc > 0)
{
result = number1 - number2;
text.setText(Double.toString(result));
}
if(multic > 0)
{
result = number1 * number2;
text.setText(Double.toString(result));
}
if(divc > 0)
{
result = number1 / number2;
text.setText(Double.toString(result));
}
}
colorChange();
}
public double numberReader()
{
Double num1;
String s;
s = text.getText();
num1 = Double.valueOf(s);
return num1;
}
public static void main(String[] args)
{
new Calculator();
}
}
そして、これがエラーコードです。PrintProgram Compatibility Troubleshooter 発行元の詳細
見つかった問題 互換性のないプログラム互換性のないプログラム 電卓は互換性がありません。検出 検出 アプリケーションを修正 電卓 完了 見つかった問題 検出の詳細 6 互換性のないプログラム 検出 検出 電卓は互換性がありません。Fix application Calculator Completed 互換性のないプログラムを修正する手順を示します。情報互換性モード 適用される互換性モード: Windows XP (Service Pack 3) ユーザー検証: 修正が機能しました 検出の詳細 コレクション情報を展開します コンピューター名: JOSHVAYLELAPTOP Windows バージョン: 6.2 アーキテクチャ: x64 時間: 2013 年 8 月 7 日水曜日 7:40:32 PM 発行元の詳細Program Compatibility Troubleshooter を展開する このバージョンの Windows で古いプログラムを実行する際の問題を見つけて修正します。パッケージ バージョン: 1.5 発行元: Microsoft Windows Program Compatibility Troubleshooter このバージョンの Windows で古いプログラムを実行する際の問題を見つけて修正します。パッケージ バージョン: 1.0 発行元: Microsoft Corporation