java - 它在 Eclipse 中运行正常但无法作为 .jar 文件运行

标签 java

我正在编写一个数学程序。在 Eclipse 中一切运行良好,但是当我将它们导出为 .jar 文件时。它没有运行。当我双击 .jar 文件时,没有任何反应。这是我的目录的屏幕截图。请帮忙。

导出 .jar 文件的步骤如下:

File->Export->JAR file(java下),点击Next。在 JAR 文件规范中,选择“TestingMath”,然后选择: 导出选中项目的所有输出文件夹。 导出 Java 源文件和资源。 导出已检查项目的重构。
浏览到桌面以查找目标。
然后点击完成。

screenshot

package math;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.net.URL;
import java.util.Random;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.UnsupportedAudioFileException;
import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.border.Border;
import javax.swing.border.CompoundBorder;

public class Testing extends JFrame implements ActionListener
{
/**
* 
*/
private static final long serialVersionUID = 1L;
JLabel lblQuestion;
JLabel lblImage;
JButton bOK;
JButton bExit;
JPanel radioPanel;
JPanel panBottom;
JRadioButton[] radioButton;
String [] store ;
ButtonGroup bg;
JButton bNext;
JPanel mainPanel;
JPanel pRight;
JLabel lblCorrect;
JLabel lblWrong;
int vCorrect = 0;
int vWrong = 0;
JScrollPane scroll;

public Testing()
{
//mc = mathCombine;
//mc.setVisible(false);
mainPanel = new JPanel(new BorderLayout());
buildingGUI();
//listAllFiles();
innitializeAllComponents();        
URL url = getClass().getClassLoader().getResource("files/" + 1 + ".txt");

String strQuestion = readTextFile(url.toString(), 1);

store = strQuestion.toString().split("!!!");
lblQuestion.setText("<html>" + store[0] + "</html>");
//I need to get the image and display at the center according
//to the fileNumber
getTheImageAndDisplay(1);
assignRandomNumberToRadioButton(store[1]);
mainPanel.add(lblQuestion, BorderLayout.NORTH);
mainPanel.add(radioPanel, BorderLayout.WEST);
mainPanel.add(panBottom, BorderLayout.SOUTH);
mainPanel.add(scroll, BorderLayout.CENTER);
mainPanel.setPreferredSize(new Dimension(640, 480));

this.getContentPane().add(mainPanel);
}

private void getTheImageAndDisplay(int fileNumber) 
{
// TODO Auto-generated method stub
System.out.println("fileNumber for ismage: " + fileNumber);
lblImage.setIcon(new ImageIcon(Testing.class.getResource("/images/" + fileNumber + ".png"))); 
//scroll = new JScrollPane(lblImage);
}

private void assignRandomNumberToRadioButton(String sAnswer) 
{
// TODO Auto-generated method stub
int number  = Integer.parseInt(sAnswer.toString().trim());
//System.out.println("number: " + number);
Random random = new Random();
int rand = random.nextInt(4); //This is the number of radioButton.
//System.out.println("rand is: " + rand);
System.out.println("Answer issss: " + sAnswer);
radioButton[rand].setText(sAnswer);

if(!radioButton[0].getText().equals(""))
{
radioButton[1].setText("" +( number + 2));
radioButton[2].setText("" + (number - 2));
radioButton[3].setText("" + (number + 1));
}
else if(!radioButton[1].getText().equals(""))
{
radioButton[0].setText("" +( number + 2));
radioButton[2].setText("" + (number - 2));
radioButton[3].setText("" + (number + 1));
}
else if(!radioButton[2].getText().equals(""))
{
radioButton[1].setText("" +( number + 2));
radioButton[0].setText("" + (number - 2));
radioButton[3].setText("" + (number + 1));
}
else if(!radioButton[3].getText().equals(""))
{
radioButton[1].setText("" +( number + 2));
radioButton[2].setText("" + (number - 2));
radioButton[0].setText("" + (number + 1));
}        
}

/**
* Construct GUI.
*/
private void buildingGUI() 
{
lblImage = new JLabel();
lblImage.setHorizontalAlignment(JLabel.CENTER);
scroll = new JScrollPane(lblImage);
bNext = new JButton("Next");
lblQuestion = new JLabel();
bOK = new JButton("OK");
bExit = new JButton("Exit");
lblQuestion.setFont(new Font("Tahoma", Font.PLAIN, 12));
radioPanel = new JPanel();
panBottom = new JPanel();
panBottom.setLayout(new GridLayout(1, 2));
panBottom.add(bOK);
panBottom.add(bExit);
bg = new ButtonGroup();
radioPanel.setLayout(new GridLayout(4, 1));
radioButton = new JRadioButton[4];
radioButton[0] = new JRadioButton();
radioButton[1] = new JRadioButton();
radioButton[2] = new JRadioButton();
radioButton[3] = new JRadioButton();
radioPanel.setLayout(new GridLayout(10, 1));
radioPanel.add(radioButton[0]);
radioPanel.add(radioButton[1]);
radioPanel.add(radioButton[2]);
radioPanel.add(radioButton[3]);
radioPanel.add(new JLabel());
radioPanel.add(new JLabel());
radioPanel.add(new JLabel());
radioPanel.add(bNext);
radioPanel.add(new JLabel());
radioPanel.add(new JLabel());
bg.add(radioButton[0]);
bg.add(radioButton[1]);
bg.add(radioButton[2]);
bg.add(radioButton[3]);
pRight = new JPanel();
pRight.setLayout(new GridLayout(5, 2));
lblCorrect = new JLabel();        
pRight.add(lblCorrect);
lblWrong = new JLabel();        
pRight.add(lblWrong);
pRight.add(new JLabel("                   "));
pRight.add(new JLabel("                   "));
mainPanel.add(pRight, BorderLayout.EAST);    
}

private int generateRandomNumber()
{
// TODO Auto-generated method stub
Random random = new Random();
int rand = random.nextInt(20);  //This is the number of Files in the system.
return rand;
}

private void innitializeAllComponents() 
{
// TODO Auto-generated method stub
CompoundBorder border;
Border raisedbevel = BorderFactory.createRaisedBevelBorder();
Border loweredbevel = BorderFactory.createLoweredBevelBorder();
border = BorderFactory.createCompoundBorder( raisedbevel, loweredbevel);
lblQuestion.setFont(new Font("Tahoma", Font.PLAIN, 18));
lblQuestion.setBorder(BorderFactory.createLineBorder(Color.GREEN));
lblQuestion.setBorder(border);
radioPanel.setBorder(border);
pRight.setBorder(border);
panBottom.setBorder(border);
radioButton[0].setFont(new Font("Tahoma", Font.BOLD, 16));
radioButton[1].setFont(new Font("Tahoma", Font.BOLD, 16));
radioButton[2].setFont(new Font("Tahoma", Font.BOLD, 16));
radioButton[3].setFont(new Font("Tahoma", Font.BOLD, 16));
lblCorrect.setFont(new Font("Tahoma", Font.BOLD, 14));
lblCorrect.setForeground(Color.BLUE);
lblCorrect.setHorizontalAlignment(JLabel.CENTER);
lblWrong.setFont(new Font("Tahoma", Font.BOLD, 14));
lblWrong.setForeground(Color.red);
lblWrong.setHorizontalAlignment(JLabel.CENTER);
bNext.addActionListener(this);
}
@SuppressWarnings("resource")
private String readTextFile(String fileName, int fileNumber) 
{
// TODO Auto-generated method stub
StringBuilder  stringBuilder = new StringBuilder();
BufferedReader reader = null;        
try
{
Random random = new Random();
//int rand = random.nextInt(20);
URL url = getClass().getClassLoader().getResource("files/" + fileNumber + ".txt");
File file = new File(url.toURI());
try
{
reader = new BufferedReader(new FileReader(file));
String line = null;
stringBuilder = new StringBuilder();
String ls = System.getProperty("line.separator");
try
{
while(( line = reader.readLine()) != null ) 
{
stringBuilder.append(line);
stringBuilder.append(ls);
}
} 
catch(IOException e)
{
e.printStackTrace();
}
}
catch(IOException e)
{
e.printStackTrace();
}
}
catch(Exception e)
{
e.printStackTrace();
}
return stringBuilder.toString();
}

@Override
public void actionPerformed(ActionEvent ae) 
{
// TODO Auto-generated method stub
if(ae.getSource().equals(bNext))
{
//if nothing selected, display a message, 
//else: get the answer and display.
if(!radioButton[0].isSelected() && !radioButton[1].isSelected() && 
!radioButton[2].isSelected() && !radioButton[3].isSelected())
{
JOptionPane.showMessageDialog(this,"Please select an Answer.", "Nothing selected", 
JOptionPane.OK_OPTION);
return;
}
else //when user select an answer.
{
String strAnswer = "";
if(radioButton[0].isSelected())
{
strAnswer = radioButton[0].getText().trim();
}
else if(radioButton[1].isSelected())
{
strAnswer = radioButton[1].getText().trim();
}
else if(radioButton[2].isSelected())
{
strAnswer = radioButton[2].getText().trim();
}
else if(radioButton[3].isSelected())
{
strAnswer = radioButton[3].getText().trim();
}
if(strAnswer.equals(store[1].trim()))
{
String strCorrect = lblCorrect.getText();
if(strCorrect.equals(""))
{
strCorrect = "0";
}
vCorrect = Integer.parseInt(strCorrect);
vCorrect = vCorrect + 1;
lblCorrect.setText("" + vCorrect);
playSound("correct");
}
else
{
String strWrong = lblWrong.getText();
if(strWrong.equals(""))
{
strWrong = "0";
}
vWrong = Integer.parseInt(strWrong);
vWrong = vWrong + 1;
lblWrong.setText("" + vWrong);
playSound("wrong");
}
int fileNumber = generateRandomNumber();
URL url = null;
String file = "files/" + fileNumber + ".txt";
url = this.getClass().getClassLoader().getResource(file);
String strQuestion = readTextFile(url.toString(), fileNumber);
store = strQuestion.toString().split("!!!");
lblQuestion.setText("<html>" + store[0] + "</html>");
clearTextInAllRadioButtons();
assignRandomNumberToRadioButton(store[1]);
getTheImageAndDisplay(fileNumber);
}
}
}    

private void playSound(String sound) 
{
// TODO Auto-generated method stub
try 
{
URL url = null;
if(sound.equals("correct"))
{
url = this.getClass().getClassLoader().getResource("sound/ding.wav");
}
else if(sound.equals("wrong"))
{
url = this.getClass().getClassLoader().getResource("sound/buzz.wav");
}
AudioInputStream audioIn = AudioSystem.getAudioInputStream(url);
// Get a sound clip resource.
Clip clip = AudioSystem.getClip();
// Open audio clip and load samples from the audio input stream.
clip.open(audioIn);
clip.start();
} 
catch (UnsupportedAudioFileException e) 
{
e.printStackTrace();
} 
catch (IOException e) 
{
e.printStackTrace();
} 
catch (LineUnavailableException e) 
{
e.printStackTrace();
}
}

private void clearTextInAllRadioButtons() 
{
// TODO Auto-generated method stub
radioButton[0].setText("");
radioButton[1].setText("");
radioButton[2].setText("");
radioButton[3].setText("");
bg.clearSelection();
}    
public static void main(String[] s)
{
Testing mr = new Testing();
mr.pack();
mr.setVisible(true);
}
}

最佳答案

在 jar 中创建一个 META-INF/MANIFEST.MF 文件。 向其中添加以下条目:

Main-Class: your.main.Class

你可以将这个文件夹和文件添加到项目中,这样它会自动添加到jar中。

关于java - 它在 Eclipse 中运行正常但无法作为 .jar 文件运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17371842/

相关文章:

java - DbUnit 无法清理插入 : foreign key constraint

java - Spring @Autowired 在 Maven Surefire 插件中生成线程时返回 null

java - 如何在 Java 中按频率生成声音?

java - Iterator Class 和 foreach 构造之间的性能差异

java - graphstream 中多重图的异常

java - 如何使用 Jackson 来反序列化这样的数组?

javadoc - 链接到现有 javadoc 仅适用于 Java 平台包

java - 如果任务遇到异常,则会抑制其进一步执行。为什么?

java - 反序列化对象时出现 StreamCorruptedException

java - 如何在 Storm 拓扑初始化时初始化我们的类?