我似乎无法捕获约束违规异常虽然我在日志中看到它.
实体
@Column(unique = true)
private String email;
Run Code Online (Sandbox Code Playgroud)
我试图像这样抓住它
try {
memberDao.create(newMember);
} catch (ConstraintViolationException e) {
//
}
Run Code Online (Sandbox Code Playgroud)
- 它永远不会到达捕获块.
我用的时候
catch(例外e)
我抓到"javax.transaction.RollbackException:ARJUNA016053:无法提交事务."
这是错误日志:
21:24:36,296 ERROR [org.jboss.ejb3.invocation] (http--127.0.0.1-8080-5) JBAS014134: EJB Invocation failed on component MemberDAOImpl for method public abstract void pv243.peaktogether.dao.MemberDAOInt.create(pv243.peaktogether.model.Member): javax.ejb.EJBTransactionRolledbackException: Transaction rolled back
at org.jboss.as.ejb3.tx.CMTTxInterceptor.handleEndTransactionException(CMTTxInterceptor.java:115) [jboss-as-ejb3-7.1.1.Final.jar:7.1.1.Final]
at org.jboss.as.ejb3.tx.CMTTxInterceptor.endTransaction(CMTTxInterceptor.java:95) [jboss-as-ejb3-7.1.1.Final.jar:7.1.1.Final]
at org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:232) [jboss-as-ejb3-7.1.1.Final.jar:7.1.1.Final]
at org.jboss.as.ejb3.tx.CMTTxInterceptor.required(CMTTxInterceptor.java:304) [jboss-as-ejb3-7.1.1.Final.jar:7.1.1.Final]
at org.jboss.as.ejb3.tx.CMTTxInterceptor.processInvocation(CMTTxInterceptor.java:190) [jboss-as-ejb3-7.1.1.Final.jar:7.1.1.Final]
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
at org.jboss.as.ejb3.component.interceptors.CurrentInvocationContextInterceptor.processInvocation(CurrentInvocationContextInterceptor.java:41) [jboss-as-ejb3-7.1.1.Final.jar:7.1.1.Final]
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
at org.jboss.as.ejb3.component.interceptors.LoggingInterceptor.processInvocation(LoggingInterceptor.java:59) [jboss-as-ejb3-7.1.1.Final.jar:7.1.1.Final]
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
at org.jboss.as.ee.component.NamespaceContextInterceptor.processInvocation(NamespaceContextInterceptor.java:50) [jboss-as-ee-7.1.1.Final.jar:7.1.1.Final]
at …Run Code Online (Sandbox Code Playgroud) 我想知道它是否有可能解决这个问题.我有qt应用程序,如果用户勾选复选框,我希望此应用程序在启动操作系统时启动.我已经google了,我想出了这个解决方案>
我的QT应用程序需要管理员权限才能修改注册表,所以
<requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>)2.应用此命令
mt -manifest manifestfile -outputresource:binfile.exe; 1
3.在QT中使用这段代码来修改注册表
void MainWindow::set_on_startup() {
QSettings settings("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", QSettings::NativeFormat);
if (ui->checkBox->checkState()) {
QString value = QCoreApplication::applicationFilePath(); //get absolute path of running exe
QString apostroph = "\"";
#ifdef DEBUG
ui->textEdit->append(QCoreApplication::applicationFilePath ());
#endif
value.replace("/","\\");
value = apostroph + value + apostroph + " --argument";
#ifdef DEBUG
ui->textEdit->append(value);
#endif
//write value to the register
settings.setValue("name", value);
}
else {
settings.remove("name");
}
}
Run Code Online (Sandbox Code Playgroud)
那么,这看起来不错吧?但是......默认管理员priveleges的应用程序无法在启动操作系统时启动,但是没有管理员priveleges的应用程序无法修改注册表.所以,有一个解决方案 - 告诉用户,如果他想设置这个"启动"选项,他首先需要以管理员身份启动应用程序,然后应用程序将能够修改注册表,默认权限将保持"asInvoker" ,但这似乎真的不切实际,我认为用户会因此而气馁.
那么,如何解决这个问题呢?其他应用如何解决这个问题?
我正在开发 QT 应用程序,我需要包含纯 C 代码。当我在 code::blocks 中编译这段代码时它成功了,可能是一个警告,但是当我尝试在 QT creator 中编译它时,我得到了这 4 个错误。
cannot convert 'char*' to 'WCHAR*' for argument '1' to 'UINT GetSystemDirectoryW(WCHAR*, UINT)'
cannot convert 'char*' to 'const WCHAR*' for argument '1' to 'HINSTANCE__* LoadLibraryW(const WCHAR*)'
cannot convert 'char*' to 'WCHAR*' for argument '1' to 'BOOL
cannot convert 'const char*' to 'const WCHAR*' for argument '2' to 'LONG RegQueryValueExW(HKEY__*, const WCHAR*, DWORD*, DWORD*, BYTE*, DWORD*)'
Run Code Online (Sandbox Code Playgroud)
代码在这里>
char systemDirectory[MAX_PATH];
GetSystemDirectory(systemDirectory, MAX_PATH); //first error
char kbdLayoutFilePath[MAX_PATH];
kbdLibrary = LoadLibrary(kbdLayoutFilePath); //second error …Run Code Online (Sandbox Code Playgroud) 即时开发QT应用程序,我使用很少的图标
这是我的resource.qrc文件
<RCC>
<qresource prefix="/new/prefix1">
<file>army-officer-icon.png</file>
<file>uac.png</file>
</qresource>
</RCC>
Run Code Online (Sandbox Code Playgroud)
然后我将其包含在我的.pro文件中
RESOURCES += \
resource.qrc
Run Code Online (Sandbox Code Playgroud)
这是处理图标的代码:
//this code is part of the mainwindow.cpp
QSystemTrayIcon *trayIcon;
trayIcon = new QSystemTrayIcon(this);
trayIcon->setContextMenu(trayIconMenu);
trayIcon->setIcon(QIcon(":/new/prefix1/army-officer-icon.png"));
trayIcon->show();
//this code is part of the ui_mainwindow.h (generated by QT)
QLabel *label_5;
label_5 = new QLabel(centralWidget);
label_5->setObjectName(QString::fromUtf8("label_5"));
label_5->setGeometry(QRect(40, 302, 46, 21));
label_5->setPixmap(QPixmap(QString::fromUtf8(":/new/prefix1/uac.png")));
label_5->show();
Run Code Online (Sandbox Code Playgroud)
所以,这看起来很合理吧?
=== windows 7,开发站,QT安装
结果效果也如我所料

我可以看到两个图标::托盘图标和uac shield =真棒
但当我搬到另一个工作站时,有些奇怪的事情发生了
=== windows XP,用户工作站,未安装QT

正如你所看到的,trayicon仍然有自己的图标,但是"uac shield icon"消失了...它非常令人不安,我真的不明白,因为这两个图标都是*.png格式,我浏览了很多,也许它与qt图像插件有联系(虽然我认为只有当我的图标是*.jpeg,*.gif格式时我才应该关心它),但是无法使这个解决方案有效...
所以欢迎任何想法.Thanx提前.
我不知道如何解决这个问题。我正在开发一个图形编辑器,可以在其中绘制圆弧(线)。我手动将弧组件的大小设置为 1000x1000,因此在拖放此弧时我不必更改它。然后我将所需尺寸的弧线绘制到该组件中。每个弧组件都安装了鼠标侦听器。问题是,只有最上面的圆弧组件才能获得鼠标消息。此外,我在 JPane 本身上安装了一个鼠标单击侦听器,但是最上层组件上的鼠标单击侦听器只是获取所有事件......描述这个问题有点困难,所以我将为您提供简单的图像

所以第一个解决方案是以某种方式将收到的消息转发到位于其下的组件,但是我不知道如何做到这一点,所以你有什么想法吗?
第二种解决方案是,不要为圆弧对象设置恒定尺寸,而是以某种方式旋转圆弧所在的矩形,我的意思是这样。

然而,仍然可能存在重叠问题。
那么,您对如何解决这个问题有什么想法吗?或者如果您有任何其他想法,如何解决这个问题,我很高兴,我只需要正确的弧线会对鼠标点击做出反应。
我不认为我的代码会以某种方式有所帮助,但它是
arcObject.setSize(1000, 1000); // !
Run Code Online (Sandbox Code Playgroud)
然后,在这个组件中,我画了一个圆弧
toX = o2.x - 24 * Math.cos(theta);
toY = o2.y - 24 * Math.sin(theta);
g2.draw(new Line2D.Double(toX, toY, o1.x, o1.y));
Run Code Online (Sandbox Code Playgroud)