2013-06-28 163 views
1

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

下面是步骤来导出.jar文件:

文件 - >导出> JAR文件(在Java的),然后单击下一步。在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); 
} 
} 
+2

我们不打算通过所有379行代码来看待。请进一步缩小问题的范围。 – Doorknob

+3

文件 - >导出 - >“可运行的JAR文件”,如果你想通过双击运行。 –

+3

您需要定义在清单文件中启动哪个类 –

回答

6

创建META-INF/MANIFEST.MF文件中的罐子。 将以下条目添加到它:

Main-Class: your.main.Class 

您可以添加此文件夹和文件的项目,所以它会被自动添加到罐子。

0

您可以从控制台或cmd窗口运行它,看看有什么问题。

,如果你是在Windows上,打开一个cmd窗口,然后执行:

java -jar /path/to/the/jar.jar 

这样,就应该输出一些错误或异常,并让一切更容易。

我希望你找到这个有用的。 :)


如果你没有发现错误或类似的东西一类,你应该做的上述答复建议,建立一个MANIFEST.MF并添加主类。

0

我知道已经晚了,但问题是,如果你有一个名为(Image1.png)图像您在Eclipse中使用例如资源,你可以把它与的getResource蚀(... ..“image.png”)一个单独的字母可能会导致的问题,并且jar无法运行。但是在eclipse中它将运行时没有任何问题。因此请检查您使用的资源的名称以及其他用途(/)面对同样的问题,因为(/)我有(/)!

这里一定是问题

URL url = getClass().getClassLoader().getResource("files/" + 1 + ".txt"); 

缺少一个(/)

URL url = getClass().getClassLoader().getResource("/files/" + 1 + ".txt"); 
相关问题