私はあなたのプロジェクトの構造を本当に知りません.私はあなたが見るための小さなサンプルコードを作りました.見てください.
私のプロジェクトが配置されていると考えてくださいC:\Mine\JAVA\J2SE\src\testingjar>
この内部のディレクトリ構造は次のとおりです。
testingjar
|
----------------------------------
| | | |
classes src manifest.text test.jar(this .jar we be creating shortly)
| |
| (Almost same as classes folder, just .java files)
---------------
| |
actualtest test
| |
*.class *.class
.jar ファイルの一部になる私のクラスは、次のとおりです。
package test;
import java.awt.*;
import javax.swing.*;
public class CustomPanel extends JPanel
{
public CustomPanel()
{
setOpaque(true);
setBackground(Color.DARK_GRAY);
JLabel label = new JLabel(
"I am a JLabel from Java Swing", JLabel.CENTER);
label.setOpaque(false);
label.setForeground(Color.WHITE);
add(label);
}
@Override
public Dimension getPreferredSize()
{
return (new Dimension(500, 300));
}
}
このクラスを次のコマンドでコンパイルしました。
C:\Mine\JAVA\J2SE\src\testingjar>javac -d classes src\test\CustomPanel.java
現在、JAR ファイルのマニフェスト ファイルを作成しています。その内容は次のとおりです。
Main-Class: test.CustomPanel
コロン (:) とパッケージ名 (test など) の間のスペースを覚えておいてください。CustomPanel の後に Enter を押してファイルを保存します。
という名前の JAR ファイルを作成するために、test.jar
次のコマンドを書きました。
C:\Mine\JAVA\J2SE\src\testingjar>cd classes
C:\Mine\JAVA\J2SE\src\testingjar\classes>jar -cfm ..\test.jar ..\manifest.txt test
この .jar ファイルを使用するクラスは次のようになります。
package actualtest;
import test.CustomPanel;
import java.awt.*;
import javax.swing.*;
public class ActualImplementation
{
private void createAndDisplayGUI()
{
JFrame frame = new JFrame("Testing Jar Implementation");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
CustomPanel panel = new CustomPanel();
frame.setContentPane(panel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String... args)
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
new ActualImplementation().createAndDisplayGUI();
}
});
}
}
これらのコマンドを書いてこれをコンパイルしました:
C:\Mine\JAVA\J2SE\src\testingjar\classes>cd..
C:\Mine\JAVA\J2SE\src\testingjar>javac -classpath test.jar -d classes src\actualtest\ActualImplement
ation.java
今実行するには、これらのコマンドを書きました:
C:\Mine\JAVA\J2SE\src\testingjar>cd classes
C:\Mine\JAVA\J2SE\src\testingjar\classes>java actualtest.ActualImplementation
出力
私の側ではうまく機能しているので、何かが欠けている可能性があります。
最新の編集:尋ねられたように、私はそれを逆にJFrame
行いました.jarファイル内にあり、JPanel
それを使用しています。
.jar ファイルの一部になるクラスは次のとおりです。
package test;
import java.awt.*;
import javax.swing.*;
public class CustomFrame extends JFrame
{
public CustomFrame(String title)
{
super(title);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
}
manifest.txt ファイルの内容は、次のように変更されます。
Main-Class: test.CustomFrame
また、.jar ファイルの CustomFrame クラスを使用するクラスは次のとおりです。
package actualtest;
import test.CustomFrame;
import java.awt.*;
import javax.swing.*;
// http://stackoverflow.com/a/11150286/1057230
public class CustomPanel extends JPanel
{
private CustomFrame frame;
public CustomPanel()
{
setOpaque(true);
setBackground(Color.DARK_GRAY);
JLabel label = new JLabel(
"I am a JLabel from Java Swing", JLabel.CENTER);
label.setOpaque(false);
label.setForeground(Color.WHITE);
add(label);
}
private void createAndDisplayGUI()
{
frame = new CustomFrame("Testing Jar Implementation");
frame.setContentPane(this);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
@Override
public Dimension getPreferredSize()
{
return (new Dimension(500, 300));
}
public static void main(String... args)
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
new CustomPanel().createAndDisplayGUI();
}
});
}
}
コンパイル シーケンスは以前とほとんど同じで、次のようになります。
C:\Mine\JAVA\J2SE\src\testingjar>javac -d classes src\test\CustomFrame.java
C:\Mine\JAVA\J2SE\src\testingjar>cd classes
C:\Mine\JAVA\J2SE\src\testingjar\classes>jar -cfm ..\test.jar ..\manifest.txt test
C:\Mine\JAVA\J2SE\src\testingjar\classes>cd..
C:\Mine\JAVA\J2SE\src\testingjar>javac -classpath test.jar -d classes src\actualtest\CustomPanel.jav
a
C:\Mine\JAVA\J2SE\src\testingjar>cd classes
C:\Mine\JAVA\J2SE\src\testingjar\classes>java actualtest.CustomPanel
それでも同じ出力が得られます。
最新の編集:
JARファイルを使用する場合、後者の代わりに、このことがうまくいく場合があることがわかりました。ドット演算子も含めてクラスパスを指定する必要があります .
。
C:\Mine\JAVA\J2SE\src\testingjar>java -classpath test.jar;.; actualtest.CustomPanel
これは、フォルダーactualtest
package
内に持ってきたときであり、上記のコマンドはこの状況で機能しました。testingjar