HELP, HELP, HELP, Problems using GridBagLayout with a BorderLayout
I have a BorderLayout for my application. I created a JPanel that has the following items added to it:
1)Button
2)VisualComponent
3)ControllerComponent
The JPanel is then added to the WEST Pane of the BorderLayout. My problem is that I can not get my components in the JPanel to display correctly. The items should be added from top to buttom in my JPanel, but they overlap and display side by side, and some don't appear at all until my entire window application is Maximized. It seems as if all my components are trying to display in one row even though I explicitly add them to different rows as follows:
1)addUsingGBL(openFile,0,1,2,1);
2)addUsingGBL(visualComponent,1,1,1,3);
3)addUsingGBL(controlsComponent,4,1,2,1);
where addUsingGBL is as follows:
void addUsingGBL(Component component,int row, int column, int width, int height)
gbc. gridx = row;
gbc.gridy = column;
gbc.gridwidth = width;
gbc.gridheight = height;
gbLayout.setConstraints(component, gbc);
mediaPanel.add(component);
mediaPanel.doLayout();
If anyone has any suggestions, I would greatly appreciate it. Entire code is available if needed. Thanks!
Here is the code, sorry, didn't see that part before.
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
import javax.swing.border.*;
import javax.media.*;
public class MediaPlayerDemo extends JFrame /*implements ControllerListener*/{
private Player player;
private File file;
public static JPanel mediaPanel;
public static JScrollPane scrollableMediaPanel;
//public static JFrame navigation = new JFrame("Lessons");
public static Component visualComponent;
public static Component controlsComponent;
private static ImageIcon background = new ImageIcon("c:/Tony.jpg");
public static GridBagConstraints gbc;
public static GridBagLayout gbLayout;
//public static panel column;
//public static Container c;
// inner class to handler events from media player
private class EventHandler implements ControllerListener
public void controllerUpdate( ControllerEvent e )
if ( e instanceof EndOfMediaEvent)
//if ( player == null )
//return;
player.close();
//if ( visualComponent != null )
mediaPanel.remove( visualComponent );
//if ( controlsComponent != null )
mediaPanel.remove( controlsComponent );
mediaPanel.doLayout();
// doLayout();
if ( e instanceof RealizeCompleteEvent )
//c = getContentPane();
// load Visual and Control components if they exist
visualComponent =
player.getVisualComponent();
//visualComponent.setSize(5,5);
mediaPanel.doLayout();
//**Sets the layout for mediaPanel as GridLayout**
//**GridLayouts set the rows and col, **
//**& adds contentslt to rt **
//scrollableMediaPanel= new JScrollPane(mediaPanel);
//scrollableMediaPanel= new JScrollPane(mediaPanel);
gbc.weightx = 0;
gbc.weighty = 0;
gbc.fill = GridBagConstraints.NONE;
if ( visualComponent != null )
//add comp #2
addUsingGBL(visualComponent,1,1,1,3);
controlsComponent =
player.getControlPanelComponent();
if ( controlsComponent != null )
//add comp #3
//mediaPanel.add(controlsComponent);
addUsingGBL(controlsComponent,1,1,1,3);
controlsComponent =
player.getControlPanelComponent();
/*if ( controlsComponent != null )
//add comp #3
addUsingGBL(controlsComponent,4,1,2,1);
doLayout();//after all components are added, you must redo your layout
//**The following is for adding the a container only **
//**getContentPane().add(mediaPanel,BorderLayout.WEST);**
//**getContenPane().doLayout(); **
//**setSize(200,700);//(width, Height) **
//**show(); **
}//if
}//controllerUpdate
}//eventHandler
public MediaPlayerDemo()
//**Title for a container **
//**super( "Demonstrating the Java Media Player" );**
mediaPanel = new panelBack(background);//instantiate JPanel Object
gbLayout = new GridBagLayout();
mediaPanel.setAlignmentY(TOP_ALIGNMENT);
mediaPanel.setLayout(gbLayout);
gbc = new GridBagConstraints();
gbc.fill = GridBagConstraints.NONE;
//gbc.anchor = GridBagConstraints.NONE;
//instatiate JButton object
JButton openFile = new JButton( "Open file to play" );
//openFile.setBounds(0, 0, 25, 25);
//openFile.setVisible(true);
//JBUTTON ActionListener
openFile.addActionListener
new ActionListener()
public void actionPerformed( ActionEvent e )
openFile();
createPlayer();
);//addActionListener
//add comp #1
addUsingGBL(openFile,0,1,2,1);
//set scrollPane
scrollableMediaPanel = new JScrollPane(mediaPanel,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS );
//Set Border
scrollableMediaPanel.setViewportBorder(new BevelBorder(BevelBorder.RAISED));
}//Constructor
private void createPlayer()
if ( file == null )
return;
removePreviousPlayer();
try
// create a new player and add listener
player = Manager.createPlayer( file.toURL() );
player.addControllerListener( new EventHandler() );
player.start(); // start player
catch ( Exception e )
JOptionPane.showMessageDialog( this,
"Invalid file or location", "Error loading file",
JOptionPane.ERROR_MESSAGE );
//Main only useful if creating a container to hold menuPanel
public static void main(String args[])
MediaPlayerDemo app = new MediaPlayerDemo();
app.getContentPane().setLayout(new BorderLayout(0,0));
app.getContentPane().setBackground(Color.white);
app.getContentPane().add(scrollableMediaPanel, BorderLayout.WEST);
app.getContentPane().validate();//re-layout a container for which the layout has changed
app.setSize(1000,700);//(width, height)
app.show();
app.addWindowListener
new WindowAdapter()
public void windowClosing( WindowEvent e )
System.exit(0);
private void openFile()
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileSelectionMode(
JFileChooser.FILES_ONLY );
int result = fileChooser.showOpenDialog( this );
// user clicked Cancel button on dialog
if ( result == JFileChooser.CANCEL_OPTION )
file = null;
else
file = fileChooser.getSelectedFile();
private void removePreviousPlayer()
if ( player == null )
return;
player.close();
if ( visualComponent != null )
mediaPanel.remove( visualComponent );
if ( controlsComponent != null )
mediaPanel.remove( controlsComponent );
//set background for the JPanel
public class panelBack extends JPanel
ImageIcon image;
panelBack(ImageIcon image)
super();
this.image=image;
public void paintComponent(Graphics g)
image.paintIcon(this,g,0, 0);
}//panelback
void addUsingGBL(Component component,int row, int column, int width, int height)
gbc = new GridBagConstraints();
gbc. gridx = row;
gbc.gridy = column;
gbc.gridwidth = width;
gbc.gridheight = height;
gbLayout.setConstraints(component, gbc);
mediaPanel.add(component);
mediaPanel.doLayout();
}//MediaPlayerDemo
Similar Messages
-
HELP, HELP, HELP, Problems using GridBagLayout with BorderLayout
I have a BorderLayout for my application. I created a JPanel that has the following items added to it:
1)Button
2)VisualComponent
3)ControllerComponent
The JPanel is then added to the WEST Pane of the BorderLayout. My problem is that I can not get my components in the JPanel to display correctly. The items should be added from top to buttom in my JPanel, but they overlap and display side by side, and some don't appear at all until my entire window application is Maximized. It seems as if all my components are trying to display in one row even though I explicitly add them to different rows as follows:
1)addUsingGBL(openFile,0,1,2,1);
2)addUsingGBL(visualComponent,1,1,1,3);
3)addUsingGBL(controlsComponent,4,1,2,1);
where addUsingGBL is as follows:
void addUsingGBL(Component component,int row, int column, int width, int height)
gbc. gridx = row;
gbc.gridy = column;
gbc.gridwidth = width;
gbc.gridheight = height;
gbLayout.setConstraints(component, gbc);
mediaPanel.add(component);
mediaPanel.doLayout();
If anyone has any suggestions, I would greatly appreciate it. Entire code is available if needed. Thanks!void addUsingGBL(Component component,int row, int column, int width, int height)
gbc. gridx = row;
gbc.gridy = column;
gbc.gridwidth = width;
gbc.gridheight = height;
gbLayout.setConstraints(component, gbc);
mediaPanel.add(component);
mediaPanel.doLayout();
}I see that the problem is that you are using the same gridbagconstraints reference to add all your components. In effect, all your components refer to the same gridbagconstraints , you are getting all the components on a single row. The solution to this is simple - Try this out and tell me whether that works...
void addUsingGBL(Component component,int row, int column, int width, int height)
//Add this line in the beginning...
gbc = new GridBagConstraints();
gbc. gridx = row;
gbc.gridy = column;
gbc.gridwidth = width;
gbc.gridheight = height;
gbLayout.setConstraints(component, gbc);
mediaPanel.add(component);
mediaPanel.doLayout(); -
Javascript error on - Help - Learn how to use Numbers with this online...
I am trying to find out more about Numbers. I am using iTunes 9.1.1 on a Vista PC. I get a Javascript error in Internet Explorer 8 when I try to access:
Help - Learn how to use Numbers with this online resource.
http://help.apple.com/numbers/1.0
The link redirects to the following page:
http://help.apple.com/iwork/safari/interface/#tan727163ed
The above page is blank except for boxes for Keynote Help, Pages Help, Numbers help, and a blank input field that seems to do nothing. Here is the Javascript error message from Internet Explorer 8:
Webpage error details
User Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729)
Timestamp: Tue, 1 Jun 2010 20:55:54 UTC
Message: This command is not supported.
Line: 1
Char: 41589
Code: 0
URI: http://help.apple.com/iwork/safari/interface/javascript.jsLink also does not work for me in WIN 7 with IE8. However, it does work in Chrome in WIN 7. It also works in Safari on my G4. Suggest you try Chrome or it may work in another browser like FireFox or Safari in Vista.
-
Problem using ViewObject with bc4j:table
Hello !!
This is the query of my ViewObject:
select * from speiseplan order by jahr desc, kw desc;
and everything works fine in the BC4J tester:
jahr kw
2003 52
2003 7
2003 3
2002 51
But in my uix page the rows are not correctly sorted:
jahr kw
2003 3
2003 7
2003 52
2002 51
What's going wrong here?
Thanks for your help.
Regards,
MareikeDuplicate post.
Original problem using ViewObject with <bc4j:table> -
Problem Using Multiple With Statements
I'm having a problem using multiple WITH statements. Oracle seems to be expecting a SELECT statement after the first one. I need two in order to reference stuff from the second one in another query.
Here's my code:
<code>
WITH calculate_terms AS (SELECT robinst_current_term_code,
CASE
WHEN robinst_current_term_code LIKE '%60' THEN robinst_current_term_code - '40'
WHEN robinst_current_term_code LIKE '%20' THEN robinst_current_term_code - '100'
END first_term,
CASE
WHEN robinst_current_term_code LIKE '%60' THEN robinst_current_term_code - '100'
WHEN robinst_current_term_code LIKE '%20' THEN robinst_current_term_code - '160'
END second_term
FROM robinst
WHERE robinst_aidy_code = :aidy)
/*Use terms from calculate_terms to generate attendance periods*/
WITH gen_attn_terms AS
SELECT
CASE
WHEN first_term LIKE '%60' THEN 'Fall '||substr(first_term,0,4)
WHEN first_term LIKE '%20' THEN 'Spring '||substr(first_term,0,4)
END first_attn_period,
CASE
WHEN second_term LIKE '%60' THEN 'Fall '||substr(second_term,0,4)
WHEN second_term LIKE '%20' THEN 'Spring '||substr(second_term,0,4)
END second_attn_period
FROM calculate_terms
SELECT *
FROM gen_attn_terms
<code>
I get ORA-00928: missing SELECT keyword error. What could be the problem?You can just separate them with a comma:
WITH calculate_terms AS (SELECT robinst_current_term_code,
CASE
WHEN robinst_current_term_code LIKE '%60' THEN robinst_current_term_code - '40'
WHEN robinst_current_term_code LIKE '%20' THEN robinst_current_term_code - '100'
END first_term,
CASE
WHEN robinst_current_term_code LIKE '%60' THEN robinst_current_term_code - '100'
WHEN robinst_current_term_code LIKE '%20' THEN robinst_current_term_code - '160'
END second_term
FROM robinst
WHERE robinst_aidy_code = :aidy),
/*Use terms from calculate_terms to generate attendance periods*/
gen_attn_terms AS
SELECT
CASE
WHEN first_term LIKE '%60' THEN 'Fall '||substr(first_term,0,4)
WHEN first_term LIKE '%20' THEN 'Spring '||substr(first_term,0,4)
END first_attn_period,
CASE
WHEN second_term LIKE '%60' THEN 'Fall '||substr(second_term,0,4)
WHEN second_term LIKE '%20' THEN 'Spring '||substr(second_term,0,4)
END second_attn_period
FROM calculate_terms
)Not tested because there are no scripts. -
Problem using Toplink with JUnit
Hi,
I have a problem using Toplink with JUnit. Method under test is very simple: it use a static EntityManager object to open a transaction and persists data to db. When I invoke the method from a test method, it gives me the exception:
java.lang.AssertionError
at oracle.toplink.essentials.ejb.cmp3.persistence.PersistenceUnitProcessor.computePURootURL(PersistenceUnitProcessor.java:248)
at oracle.toplink.essentials.ejb.cmp3.persistence.PersistenceUnitProcessor.findPersistenceArchives(PersistenceUnitProcessor.java:232)
at oracle.toplink.essentials.ejb.cmp3.persistence.PersistenceUnitProcessor.findPersistenceArchives(PersistenceUnitProcessor.java:216)
at oracle.toplink.essentials.internal.ejb.cmp3.JavaSECMPInitializer.initialize(JavaSECMPInitializer.java:239)
at oracle.toplink.essentials.internal.ejb.cmp3.JavaSECMPInitializer.initializeFromMain(JavaSECMPInitializer.java:278)
at oracle.toplink.essentials.internal.ejb.cmp3.JavaSECMPInitializer.getJavaSECMPInitializer(JavaSECMPInitializer.java:81)
at oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider.createEntityManagerFactory(EntityManagerFactoryProvider.java:119)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:83)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:60)
at it.valerio.electromanager.model.EntityFacade.<clinit>(EntityFacade.java:12)
at it.valerio.electromanager.business.ClienteBiz.insertIntoDatabase(ClienteBiz.java:36)
at it.valerio.electromanager.test.model.ClienteTest.insertDBTest(ClienteTest.java:30)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.junit.internal.runners.TestMethodRunner.executeMethodBody(TestMethodRunner.java:99)
at org.junit.internal.runners.TestMethodRunner.runUnprotected(TestMethodRunner.java:81)
at org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:34)
at org.junit.internal.runners.TestMethodRunner.runMethod(TestMethodRunner.java:75)
at org.junit.internal.runners.TestMethodRunner.run(TestMethodRunner.java:45)
at org.junit.internal.runners.TestClassMethodsRunner.invokeTestMethod(TestClassMethodsRunner.java:66)
at org.junit.internal.runners.TestClassMethodsRunner.run(TestClassMethodsRunner.java:35)
at org.junit.internal.runners.TestClassRunner$1.runUnprotected(TestClassRunner.java:42)
at org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:34)
at org.junit.internal.runners.TestClassRunner.run(TestClassRunner.java:52)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:38)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
Where is the problem???
Regards,
ValerioEntityFacade class is very simple and it uses a static EntityManager object. Here the code:
public class EntityFacade {
private static EntityManager em = Persistence.createEntityManagerFactory("ElectroManager").createEntityManager();
private static Logger logger=Logger.getLogger(EntityFacade.class);
public static void insertCliente(Cliente c)
logger.debug("Inserisco cliente nel db: " + c);
em.getTransaction().begin();
c.setId(getNextIdForTable("Cliente"));
em.persist(c);
em.getTransaction().commit();
If I call the method from inside a main it works well, so I think the problem is not the classpath neither the URL in the persistence.xml. However the URL is:
<property name="toplink.jdbc.url" value="jdbc:derby:c:/programmi/ElectroManager/db/electroManager"/>
I use the latest build version of TopLink.
Thanks. -
Any Problems using SSL with Safari and the move with Internet explorer to require only TLS encryption.
Hi .
Apple no longer supports Safari for Windows if that's what you are asking > Apple apparently kills Windows PC support in Safari 6.0
Microsoft has not written IE for Safari for many years. -
Problems using iCloud with Mountain Lion on iMac8,1
problems using iCloud with Mountain Lion on iMac8,1 - about 5J old - iMac gets slower and slower - total free memory is used in some minutes - no more reaction on input
Download > http://codykrieger.com/gfxCardStatus Open it and select Integrated Only. It's a bug with NVIDIA graphic cards
-
HELP!! Problems using some apps??
Can someone please help?
Im having a problem using some Apps - mainly Natwest banking and My Fitness Pal both are saying i require internet to use (wifi or 3G)
I do have BIS on my phone and can acces internet and other apps suck as Facebook, GoogleMaps, Paypal etc etc.
Is there something different i need to do to use these apps?
Im using BB Curve 8520 OS 5v
ThanksDid these apps work ok for you in the past?
On your Manage Connections screen, click on the Services Status. What is the status of the BlackBerry Internet Service?
Try turning off the Mobile Network at your Manage Connections screen, and using ONLY a WiFi connection and see if that works.
1. If any post helps you please click the below the post(s) that helped you.
2. Please resolve your thread by marking the post "Solution?" which solved it for you!
3. Install free BlackBerry Protect today for backups of contacts and data.
4. Guide to Unlocking your BlackBerry & Unlock Codes
Join our BBM Channels (Beta)
BlackBerry Support Forums Channel
PIN: C0001B7B4 Display/Scan Bar Code
Knowledge Base Updates
PIN: C0005A9AA Display/Scan Bar Code -
Problems Using Viber with new iPhone 4S
When I try and use VIber with my new iPhone is says push notifications are not enabled, even though I've enabled them. I've also tried deleting and reinstalling viber several times, along with restarting the phone. Is anyone else having the same problem and does anyone have any suggestions of something else I could do?
Hi,
This is a member of Viber's development team.
@libbyfromchristchurch - Please check: http://helpme.viber.com/index.php?/Knowledgebase/Article/View/38/0/push-notifica tions-for-iphone---how-to-enable
@quyenfromseattle - This is a known issue which will be resolved shortly. Make sure that you stay current with our version updates.
It may help to change 'banners' to 'alerts' on Viber's Push Notification settings as a temporary workaround.
Thank you for your patience! -
Problem using ipod with itunes 5.0.1
Could anyone help me?? I'm having serious problems using my ipod mini with my "just downloaded" itunes 5.0.1.
it says that my comunication software with ipod is not correctly installed and that i have to reinstall itunes again. i did it the problem is always there. what can i do?? can someone help me??Man, it seems that iTunes 5.whatever has gotten us all a little hot under the collar. I'm back up and running...this is what I did...I hope it helps some of you out.
1) created a new folder in MyMusic and copied everything from my iTunes library to the new folder. I then tested a few songs to make sure they still played (you never know)
2) I deleted iTunes using the control panel selection Add/Delete programs. I emptied the recycle gin and then did a search to see that iTunes was no longer there.
3) I went to filehippo.com to download iTunes 4.8 (my original disks are packed (Thank you to poster Allison for the filehippo.com suggestion).
4) I copied all my songs back into iTunes from where I had stored them in the new folder I created in MyMusic)
5) I connected the iPod Mini and opened iTunes and darn if it STILL didn't recognize the iPod
6) I did a restore on the iPod
7) I reconnected the iPod and had to reregister it and Voila! it worked again!!!!
Whatever the new features were in ver. 5.01, they were NOT worth the hassle I've experienced over the past two weeks. I'll stick with version 4.8 for awhile. -
Problem using SmartCard with 2 Certificates stored and SunPKCS11
Hi,
I'm trying to access one SmartCard token in Java 1.5 using SunPKCS11 provider for crypt, decrypt and digital signature operations.
I have 2 certificates stored on Token:
- CertA;
- CertB.
There are also 2 PIN:
- PIN1;
- PIN2.
I use:
- PIN1 for logging into the token;
- PIN1 for operation involving CertA;
- PIN2 for operation involving CertB;
There is no problem to logging into the token using Java and, without any troubles, I can read certificates and key from the
cryptographic card.
There is no problem using CertA for all my operation, but every attempt of using Private Key of CertB (for the same operations) returns with an Exception:
java.security.ProviderException: sun.security.pkcs11.wrapper.PKCS11Exception: CKR_DEVICE_ERROR
Here there's an extract of my source code.
public void loginToken() {
Provider UserProvider = new sun.security.pkcs11.SunPKCS11(C:\\pkcs11.cfg);
Security.addProvider(UserProvider);
try {
KeyStore ks = null;
X509Certificate UserCert = null;
PrivateKey UserCertPrivKey = null;
PublicKey UserCertPubKey = null;
//PIN
char PIN1[] = "11111".toCharArray();
char PIN2[] = "22222".toCharArray();
//logging into token
ks = KeyStore.getInstance("PKCS11", UserProvider);
ks.load(null, PIN1);
//enumeration alias
String alias = "";
Enumeration e = ks.aliases();
while (e.hasMoreElements()) {
alias = (String) e.nextElement();
//Certificate
UserCert = (X509Certificate) ks.getCertificate(alias);
//PublicKey
UserCertPubKey = (PublicKey) ks.getCertificate(alias).getPublicKey();
if (alias.compareToIgnoreCase("Cert1") == 0) {
//PrivateKey reference
UserCertPrivKey = (PrivateKey) ks.getKey(alias, PIN1);
} else if (alias.compareToIgnoreCase("Cert2") == 0) {
//PrivateKey reference
UserCertPrivKey = (PrivateKey) ks.getKey(alias, PIN2);
} else {
System.out.println("ALIAS UNKNOW");
System.exit(1);
//Signature Test
if (!MakeSignature(UserCertPrivKey, UserProvider))
System.out.println(" *** SIGNATURE OK *** ");
else
System.out.println(" *** SIGNATURE KO *** ");
catch (Exception ex) {
System.out.println("ERROR: " + ex);
public boolean MakeSign(PrivateKey PrivKey, Provider p) {
try {
//File I/O
FileInputStream txtfis = new FileInputStream("C:\\Test.txt");
FileOutputStream sigfos = new FileOutputStream("C:\\Test_Signature.txt");
//Signature Obj init
Signature dsa = Signature.getInstance("SHA1withRSA", p.getName());
dsa.initSign(PrivKey);
//Update data
BufferedInputStream bufin = new BufferedInputStream(txtfis);
byte[] buffer = new byte[1024];
int len;
while (bufin.available() != 0) {
len = bufin.read(buffer);
dsa.update(buffer, 0, len);
bufin.close();
//Make signature
byte[] realSig = dsa.sign();
//save signature on file
sigfos.write(realSig);
sigfos.close();
return true;
catch (Exception ex) {
System.out.println("ERROR: " + ex);
return false;
Any help would be grateful...
Thanks in advance.
P.S. Sorry for my EnglishThis is the same my initial problem.
I resolved it using IAIK-PKCS#11Wrapper (it is FREE) insted of sun.security.pkcs11.SunPKCS11.
You can find it here:
http://jce.iaik.tugraz.at/sic/products/core_crypto_toolkits/pkcs_11_wrapper
Here an exemple of code.
The main class:
import iaik.pkcs.pkcs11.Module;
import iaik.pkcs.pkcs11.DefaultInitializeArgs;
import java.util.Hashtable;
import iaik.pkcs.pkcs11.Token;
import iaik.pkcs.pkcs11.Slot;
import iaik.pkcs.pkcs11.Session;
import iaik.pkcs.pkcs11.objects.RSAPrivateKey;
import java.util.Vector;
import iaik.pkcs.pkcs11.objects.PrivateKey;
import iaik.pkcs.pkcs11.objects.X509PublicKeyCertificate;
import java.util.Enumeration;
import iaik.pkcs.pkcs11.objects.Key;
import java.security.cert.CertificateFactory;
import java.io.ByteArrayInputStream;
import iaik.pkcs.pkcs11.Mechanism;
import java.security.Security;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import java.io.File;
import java.io.FileInputStream;
import org.bouncycastle.cms.CMSSignedDataGenerator;
import org.bouncycastle.cms.CMSProcessableByteArray;
import java.util.ArrayList;
import java.security.cert.CertStore;
import java.security.cert.CollectionCertStoreParameters;
import org.bouncycastle.cms.CMSSignedData;
import java.io.FileOutputStream;
import java.security.cert.X509Certificate;
import iaik.pkcs.pkcs11.TokenInfo;
import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers;
public class MakeSignature {
public static void main(String[] args) {
String USER_PIN = "12345678";
String DLL_NAME = "C:\\windows\\system32\\dll_P11_name.dll";
String OBJ_LABEL1 = "CNS0"; //this is the label of my 1th cert
String OBJ_LABEL2 = "CNS1"; //this is the label of my 2th cert
String INPUT_FILE = "C:\\Temp\\test.txt";
String OUTPUT_FILE = "C:\\Temp\\test.p7m";
try {
// ********** INITIALIZE PKCS#11 MODULE WITH DEFAULT PARAMETERS **********
Module pkcs11Module = Module.getInstance(DLL_NAME);
pkcs11Module.initialize(new DefaultInitializeArgs());
// ********** SELECT TOKEN **********
Slot[] slotsWithToken = pkcs11Module.getSlotList(Module.SlotRequirement.TOKEN_PRESENT);
Token[] tokens = new Token[slotsWithToken.length];
Hashtable tokenIDtoToken = new Hashtable(tokens.length);
long tokenID = -1;
Token tokenUsed = null;
//enum readers
for (int i = 0; i < slotsWithToken.length; i++) {
tokens[i] = slotsWithToken.getToken();
tokenID = tokens[i].getTokenID();
tokenIDtoToken.put(new Long(tokenID), tokens[i]);
System.out.println("Active tokens:");
System.out.println("Token ID: " + tokenID);
if (tokens.length == 0) { //No SC found
System.out.println("No SC presents");
else {
System.out.println("Using token: " + tokens[0].getTokenID());
tokenUsed = tokens[0];
//Note: if you have more reader and more SC inserted, you have to write
//here the code for select the right token
// ********** OPEN SESSION VS THE TOKEN AND IF REQUIRED SUBMIT PIN **********
TokenInfo tokenInfo = tokenUsed.getTokenInfo();
Session session = tokenUsed.openSession(Token.SessionType.SERIAL_SESSION, false, null, null);
if (tokenInfo.isLoginRequired()) {
session.login(Session.UserType.USER, USER_PIN.toCharArray());
// ********** SET SEARCH TEMPLATE FOR THE P11 OBJECT **********
RSAPrivateKey privateSignatureKeyTemplate = new RSAPrivateKey();
privateSignatureKeyTemplate.getSign().setBooleanValue(Boolean.TRUE);
privateSignatureKeyTemplate.getLabel().setCharArrayValue(OBJ_LABEL2.toCharArray());
// ********** SEARCH P11 OBJECT USING TEMPLATE **********
Vector keyList = new Vector(4);
session.findObjectsInit(privateSignatureKeyTemplate);
Object[] matchingKeys;
while ( (matchingKeys = session.findObjects(1)).length > 0) {
keyList.addElement(matchingKeys[0]);
session.findObjectsFinal();
//Try to find the corresponding certificates for the signature keys
Hashtable keyToCertificateTable = new Hashtable(4);
Enumeration keyListEnumeration = keyList.elements();
while (keyListEnumeration.hasMoreElements()) {
PrivateKey signatureKey = (PrivateKey) keyListEnumeration.nextElement();
byte[] keyID = signatureKey.getId().getByteArrayValue();
X509PublicKeyCertificate certificateTemplate = new X509PublicKeyCertificate();
certificateTemplate.getId().setByteArrayValue(keyID);
session.findObjectsInit(certificateTemplate);
Object[] correspondingCertificates = session.findObjects(1);
if (correspondingCertificates.length > 0) {
keyToCertificateTable.put(signatureKey, correspondingCertificates[0]);
session.findObjectsFinal();
//There are three cases now: 1 no obj found; 2 found only one obj, 3 found more obj
Key selectedKey = null;
X509PublicKeyCertificate correspondingCertificate = null;
//no object found for template
if (keyList.size() == 0) {
System.out.println("No object found for template");
throw new Exception("No object found for template");
//Founf only one object
else if (keyList.size() == 1) {
selectedKey = (Key) keyList.elementAt(0);
// create a IAIK JCE certificate from the PKCS11 certificate
correspondingCertificate = (X509PublicKeyCertificate)keyToCertificateTable.get(selectedKey);
System.out.println("One object Found");
//Found more object ... user can select one
else {
System.out.println("Many obj found!!!");
//write here the code for select the right object
// ********** GET THE OBJECT **********
RSAPrivateKey signerPriKey = (RSAPrivateKey) selectedKey;
java.security.cert.CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
byte[] derEncodedCertificate = correspondingCertificate.getValue().getByteArrayValue();
//Cast to java.security.cert.X509Certificate
java.security.cert.X509Certificate signerCert = (java.security.cert.X509Certificate) certificateFactory.
generateCertificate(new ByteArrayInputStream(derEncodedCertificate));
// ********** SIGNATURE OPERATION **********
//Add BouncyCastle as provider
Security.addProvider(new BouncyCastleProvider());
//initialize signature operation
session.signInit(Mechanism.RSA_PKCS, (PrivateKey) signerPriKey);
//get input data
File src = new File(INPUT_FILE);
int sizecontent = ( (int) src.length());
byte[] contentData = new byte[sizecontent];
FileInputStream freader = new FileInputStream(src);
freader.read(contentData, 0, sizecontent);
freader.close();
//calculate digest of the input data
byte[] toEncrypt = buildBits(contentData); //I've already posted the code for this function
//make signature
byte[] signature = session.sign(toEncrypt);
// ********** MAKE P7 WELL FORMAT DOCUMENT **********
//CMSSignedDataGenerator fact = new CMSSignedDataGenerator();
Signature2CMSSignedData fact = new Signature2CMSSignedData();
CMSProcessableByteArray content = new CMSProcessableByteArray(contentData);
//Creation of BC CertStore
ArrayList certList = new ArrayList();
certList.add(signerCert);
CertStore certs = CertStore.getInstance("Collection", new CollectionCertStoreParameters(certList), "BC");
//Signature Alg
String algorithm = CMSSignedDataGenerator.DIGEST_SHA1;
//add element to P7
fact.addSignature(signature, signerCert, algorithm);
fact.addCertificatesAndCRLs(certs);
//generate enveloped using Bouncycastle provider
CMSSignedData envdata = fact.generate(PKCSObjectIdentifiers.data.getId(), content, true);
byte[] enveloped = envdata.getEncoded();
//Write P7 file
FileOutputStream efos = new FileOutputStream(OUTPUT_FILE);
efos.write(enveloped);
efos.close();
// ********** END **********
session.closeSession();
pkcs11Module.finalize(null);
catch (Exception ex) {
ex.printStackTrace();
}Main class uses buildBits function (already posted in this topic) and Signature2CMSSignedData class.import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.security.cert.CertStore;
import java.security.cert.X509CRL;
import java.security.cert.X509Certificate;
import org.bouncycastle.asn1.ASN1EncodableVector;
import org.bouncycastle.asn1.ASN1InputStream;
import org.bouncycastle.asn1.ASN1OctetString;
import org.bouncycastle.asn1.ASN1Sequence;
import org.bouncycastle.asn1.ASN1Set;
import org.bouncycastle.asn1.BERConstructedOctetString;
import org.bouncycastle.asn1.DEREncodable;
import org.bouncycastle.asn1.DERNull;
import org.bouncycastle.asn1.DERObject;
import org.bouncycastle.asn1.DERObjectIdentifier;
import org.bouncycastle.asn1.DEROctetString;
import org.bouncycastle.asn1.DERSet;
import org.bouncycastle.asn1.cms.ContentInfo;
import org.bouncycastle.asn1.cms.IssuerAndSerialNumber;
import org.bouncycastle.asn1.cms.SignedData;
import org.bouncycastle.asn1.cms.SignerIdentifier;
import org.bouncycastle.asn1.cms.SignerInfo;
import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers;
import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
import org.bouncycastle.asn1.x509.CertificateList;
import org.bouncycastle.asn1.x509.TBSCertificateStructure;
import org.bouncycastle.asn1.x509.X509CertificateStructure;
import org.bouncycastle.cms.CMSProcessable;
import org.bouncycastle.cms.CMSSignedData;
* class for generating a RSA pkcs7-signature message.
public class Signature2CMSSignedData2 {
CertStore certStore;
List certs = new ArrayList();
List crls = new ArrayList();
List signerInfs = new ArrayList();
List signers = new ArrayList();
public static final String DATA = PKCSObjectIdentifiers.data.getId();
public static final String ENCRYPTION_RSA = "1.2.840.113549.1.1.1";
private byte[] signatureData = null;
private X509Certificate cert = null;
private String digestOID = null;
private String encOID = null;
public Signature2CMSSignedData2() {
public void addSignature(byte[] signatureData, X509Certificate cert, String digestOID) {
this.signatureData = signatureData;
this.cert = cert;
this.digestOID = digestOID;
this.encOID = ENCRYPTION_RSA;
public void addCertificatesAndCRLs(CertStore certStore) throws Exception{
try {
Iterator it = certStore.getCertificates(null).iterator();
while (it.hasNext()) {
X509Certificate c = (X509Certificate) it.next();
certs.add(new X509CertificateStructure((ASN1Sequence) makeObj(c.getEncoded())));
Iterator it2 = certStore.getCRLs(null).iterator();
while (it2.hasNext()) {
X509CRL c = (X509CRL) it2.next();
crls.add(new CertificateList((ASN1Sequence) makeObj(c.getEncoded())));
catch (Exception e) {
throw new Exception(e.getMessage());
private DERObject makeObj(byte[] encoding) throws Exception {
if (encoding == null) {
return null;
ByteArrayInputStream bIn = new ByteArrayInputStream(encoding);
ASN1InputStream aIn = new ASN1InputStream(bIn);
return aIn.readObject();
public CMSSignedData generate(String signedContentType, CMSProcessable content, boolean encapsulate) throws Exception {
try {
ASN1EncodableVector digestAlgs = new ASN1EncodableVector();
ASN1EncodableVector signerInfos = new ASN1EncodableVector();
DERObjectIdentifier contentTypeOID = new DERObjectIdentifier(signedContentType);
// add the SignerInfo objects
Iterator it = signerInfs.iterator();
AlgorithmIdentifier digAlgId = new AlgorithmIdentifier(new DERObjectIdentifier(digestOID), new DERNull());
AlgorithmIdentifier encAlgId;
encAlgId = new AlgorithmIdentifier(new DERObjectIdentifier(encOID), new DERNull());
digestAlgs.add(digAlgId);
ASN1Set signedAttr = null;
ASN1Set unsignedAttr = null;
ASN1OctetString encDigest = new DEROctetString(signatureData);
ByteArrayInputStream bIn = new ByteArrayInputStream(cert.getTBSCertificate());
ASN1InputStream aIn = new ASN1InputStream(bIn);
TBSCertificateStructure tbs = TBSCertificateStructure.getInstance(aIn.readObject());
IssuerAndSerialNumber encSid = new IssuerAndSerialNumber(tbs.getIssuer(), tbs.getSerialNumber().getValue());
signerInfos.add(new SignerInfo(new SignerIdentifier(encSid), digAlgId, signedAttr, encAlgId, encDigest, unsignedAttr));
ASN1Set certificates = null;
if (certs.size() != 0) {
ASN1EncodableVector v = new ASN1EncodableVector();
it = certs.iterator();
while (it.hasNext()) {
v.add( (DEREncodable) it.next());
certificates = new DERSet(v);
ASN1Set certrevlist = null;
if (crls.size() != 0) {
ASN1EncodableVector v = new ASN1EncodableVector();
it = crls.iterator();
while (it.hasNext()) {
v.add( (DEREncodable) it.next());
certrevlist = new DERSet(v);
ContentInfo encInfo;
if (encapsulate) {
ByteArrayOutputStream bOut = new ByteArrayOutputStream();
content.write(bOut);
ASN1OctetString octs = new BERConstructedOctetString(bOut.toByteArray());
encInfo = new ContentInfo(contentTypeOID, octs);
else {
encInfo = new ContentInfo(contentTypeOID, null);
SignedData sd = new SignedData(new DERSet(digestAlgs), encInfo, certificates, certrevlist, new DERSet(signerInfos));
ContentInfo contentInfo = new ContentInfo(PKCSObjectIdentifiers.signedData, sd);
return new CMSSignedData(content, contentInfo);
catch (Exception e) {
throw new Exception(e.getMessage());
}Bye. -
Problems using SessionBroker with WebSphere
Hello!
I have some problems using a SessionBroker with WebSphere 5.1. In our project we use Entity Beans with BMP and everything works fine as long as we use a ServerSession. But when I use a SessionBroker instead, even though it wraps only one session, I get a NullPointerException every time I try to access an Entity Bean. See the stack trace below.
It is important for our project to use multiple sessions and relationships between objects coming from different sessions in the next stage of the development
By the way: The server session uses the appropriate external transaction controller, i.e. oracle.toplink.jts.was.JTSExternalTransactionController_5_1
Thanks in advance for your help!
Thomas
java.lang.NullPointerException
at oracle.toplink.ejb.EJBDataStore.store(EJBDataStore.java:572)
at oracle.toplink.ejb.bmp.BMPEntityBase.ejbStore(BMPEntityBase.java:115)
at com.ibm.ejs.container.BeanManagedBeanO.store(BeanManagedBeanO.java:233)
at com.ibm.ejs.container.EntityBeanO.beforeCompletion(EntityBeanO.java:1062)
at com.ibm.ejs.container.ContainerTx.beforeCompletion(ContainerTx.java:542)
at com.ibm.ejs.util.tran.SyncDriver.beforeCompletion(SyncDriver.java:279)
at com.ibm.ws.Transaction.JTA.RegisteredSyncs.distributeBefore(RegisteredSyncs.java:110)
at com.ibm.ws.Transaction.JTA.TransactionImpl.internalPrepare(TransactionImpl.java:1213)
at com.ibm.ws.Transaction.JTA.TransactionImpl.commit(TransactionImpl.java:962)
at com.ibm.ws.Transaction.JTA.TranManagerImpl.commit(TranManagerImpl.java:150)
at com.ibm.ws.Transaction.JTA.TranManagerSet.commit(TranManagerSet.java:182)
at com.ibm.ejs.csi.TranStrategy.commit(TranStrategy.java:712)
at com.ibm.ejs.csi.TranStrategy.postInvoke(TranStrategy.java:167)
at com.ibm.ejs.csi.TransactionControlImpl.postInvoke(TransactionControlImpl.java:565)
at com.ibm.ejs.container.EJSContainer.postInvoke(EJSContainer.java:3038)
at com.ibm.ejs.container.EJSContainer.postInvoke(EJSContainer.java:2916)Unfortunately there is no way to do this in 9.0.4. This has been fixed in the 10.1.3 preview release, in 9.0.4 you will need to create your session broker in code to work around the problem.
If you require sessions.xml support for this in 9.0.4, please contact Oracle support. -
Problem Using Profiles with DIS
I am using DIS with profiles in 11g and I am in the process of cutting and pasting a few documents into a folder in UCM. Here is what happens:
1) Select a number of documents in Windows Explorer
2) Right click and select copy
3) Right click on a folder in Content Server
4) Select paste
5) In the Check In Content form the profile defaults to the profile assigned to the folder (although others can be chosen) and displays correctly
6) Input metadata
7) Click Next to move to the next document
8) Input metadata
9) Click Previous to move to the previous document
10) Although the same profile is selected the profile displayed is the standard document profile and displays all metadata fields (incorrectly)
11) Click Next to move to the next document (the second one)
12) The standard profile with all metadata fields is displayed (incorrectly)
13) Click Next to move to the next document (the third one)
14) The correct profile is displayed
I have used DIS many times before and have never seen this happen but it is consistent. Help would be appreciated.
BillIn case anyone is interested, this was discovered to be a bug in rev 11.1.1.5 of DIS and a patch was delivered.
-
Problem using workflow with ess leave requests
Hello, I have been experiencing some problems using wf for approval with leave request in ess.
I customized ws12300111 for request approval and it is working fine. But when we try to cancel a request in ess, there are strange things happening:
- If the request is in status sent: the workflow gets in error.
- If the request is already in db: it starts a new workflow (ws12300111).
We don't want this because we have customized ws12300111 only for new requests. I have tried to customize absences in SPRO so that onlu new requests start the WS12300111, Onlu new requests have the workflow field filled with 12300111, but even like that, the WS12300111 starts whenever that is a cancelling or modification of a request.
I have also tried using a different workflow for canceliing (WS12400007), but in this case there is an error in ess when we try to submit.
This is really annoying, I have tried everything...Hello,
"If the request is in status sent: the workflow gets in error."
Please always say what the error is.
" If the request is already in db: it starts a new workflow (ws12300111"
You first have to find out how this is done. Look in SWEL, it's probably via some sort of CHANGED event.
regards
Rick Bakker
hanabi technology
Maybe you are looking for
-
HOW CAN I RE-INSTALL MY BACKED UP MUSIC BACK ON PC (XP)?
PC Windows XP iPOD 20GB (click wheel) I read several posts by folks (missmagoo, john rashleigh, buttod-) with similar problems however, my situation is different in that I have my music backed up. I would like to avoid installing third party software
-
How can I change the format of text pasted into a Mail email from another document?
I paste some text from a word document into an email in Mail. In the word document, the text was indented .5" from the right margin. In the Mail email document, the text also appears indented .5" from the right margin. But since this was the last t
-
How to highlight a cell if it matches a cell within a range.
To be more exact I am wanted to highlight cell A1 on sheet 2 if it matches any cell within a specific range on sheet 1.
-
Patterns and Matcher.find()
I would be really grateful for some assistance on this. I have been at this for three hours and can't get it correct. I have a string such as this: "Hello this is a great <!-- @@[IMAGINE_SPACIAL_VECTOR]@@ --> little string" I want to use RegEx, Patte
-
Does SCCM 2012 R2 CU4 support SHA-3 certificates?